对象移动/常量移动速率或vector

我有一些代码可以在一系列点之间的两点之间移动一个单元,当它到达下一个点时,它会从堆栈的前面popup一个点,然后朝向堆栈中的下一个点。

问题:当发生两点之间的移动时,物体会慢慢靠近点,我希望两点之间有一个恒定的移动速度,我正在考虑像物理引擎那样执行一些东西,那里已经有一些基础了但是,如果我认为自己应该这样做的话,那么这个代码并不是最好的工作,那么我就不得不重写一个公平的交易,在这个交易的方向上创建一个运动向量呢?

void EntityUnit::unitgmovement(CWaypoint* &TargetVec, float updatetime, CWaypoint* &Sourcewaypoint) { // BUG why use this twice ? what happening ? probably resolve later tonight. // a moveto function without path smoothing used for infantry and tank movement pf_Dest = TargetVec; pf_Source = Sourcewaypoint; double xDistance = pf_Dest->GetX() - unit_x; double yDistance = pf_Dest->GetY() - unit_y; double zDistance = pf_Dest->GetZ() - unit_z; double distance = sqrt(xDistance * xDistance + yDistance * yDistance + zDistance * zDistance); util_timer_movedelay += updatetime; if (util_timer_movedelay > speed / 1000) { // cout << "Distance:" << distance << endl; if (distance > 0.05) { unit_x += (0.5 * xDistance * speed * updatetime); unit_y += (0.5 * yDistance * speed * updatetime); unit_z += (0.5 * zDistance * speed * updatetime); util_timer_movedelay = 0; } else { pf_Source = pf_Dest; dest_reached = true; pf_waypoints.pop_front(); } } } 

如果我有一个对象X,Y,Z的全局位置,我该如何为它们创建一个运动vector? 这将工作,所以我有一个恒定的运动速度? 还是有另一个更容易的工作?

Solutions Collecting From Web of "对象移动/常量移动速率或vector"

问题在于以下几行:

 unit_x += (0.5 * xDistance * speed * updatetime); unit_y += (0.5 * yDistance * speed * updatetime); unit_z += (0.5 * zDistance * speed * updatetime); 

每个人的前半部分都是说移动到目标的距离的一半,随着你越来越近,这个距离就会缩小,给你减速的效果。 有时这可能是可取的,但不是在你的情况。

要解决这个问题,只需在添加之前将每个组件分开总距离,如下所示:

 unit_x += (0.5 * xDistance * updatetime * speed / distance); unit_y += (0.5 * yDistance * updatetime * speed / distance); unit_z += (0.5 * zDistance * updatetime * speed / distance); 

这个怎么用? 重要的是速度/距离。 这给了你一小部分,“我每秒钟走10英尺,走40英尺,所以我会在这秒走1/4的距离。” 如果你把那个时候你的组件距离(xDistance,yDistance,和zDistance)给你在每个轴上移动的数量。

作为一个侧面说明,0.5 * …将意味着你只能以一半的速度移动。 或者,您的速度variables可能意味着与您完全不同的东西,0.5是对象的真实“速度”。 在这种情况下,math仍然是一样的,但是值得注意的是。