GameMaker中路径移动物体的真实速度计算(xprevious/yprevious失效)
路径移动物体的真实速度计算方案
核心问题原因
GameMaker的路径移动是直接修改物体x/y坐标的内置行为,不会同步更新speed/direction,也不会维护xprevious/yprevious的帧间差值,所以这些内置变量无法反映路径移动的真实状态。
方法一:手动维护帧间位置计算速度
这是最通用的方案,适配所有路径播放模式(匀速/变速、循环/单次):
- 在物体Create事件初始化自定义位置变量:
last_x = x; last_y = y; - 在物体Step事件计算速度与方向:
// 计算当前帧与上一帧的位置差 var dx = x - last_x; var dy = y - last_y; // 用勾股定理计算实际速度(单位:像素/步) var actual_speed = sqrt(dx*dx + dy*dy); // 可选:计算真实移动方向 var actual_direction = point_direction(last_x, last_y, x, y); // 更新上一帧位置,用于下一次计算 last_x = x; last_y = y;
方法二:通过路径属性计算匀速速度
如果路径是匀速播放的,可以直接用路径内置参数推导:
// path_speed为路径播放速度(步/秒,与帧率相关) // path_get_length(path)获取路径总像素长度 // path_get_number(path)获取路径总步数 var actual_speed = path_speed * (path_get_length(path) / path_get_number(path));
注:此方法仅适用于匀速播放场景,若路径播放速度动态变化,优先用第一种方法。
内容的提问来源于stack exchange,提问作者Selim Kaltakkıran
相关产品推荐
相关产品推荐

