我正在研究应该是一个非常简单的运动算法,它接收一个D3DXVECTOR3
s 的向量并将 AI 移动到每个点。问题是,如果我通过了不止一个点,AI 似乎会卡在等于点平均值的点上。
这些点是 (x, z):
10, 10
10, 20
30, 30
60, 20
maxSpeed 为 10 仅用于测试。
void Obj::MoveToLocation(D3DXVECTOR3 newLocation, float deltaTime)
{
D3DXVECTOR3 directionToTarget = newLocation - location;
D3DXVec3Normalize(&directionToTarget, &directionToTarget);
location += maxSpeed * directionToTarget * deltaTime;
}
void Obj::Patrol(std::vector<D3DXVECTOR3> locations, float deltaTime)
{
hasArrived = false;
for (int i = 0; i < locations.size(); ++i)
{
if (!hasArrived)
MoveToLocation(locations[i], deltaTime);
if ((location.x <= locations[i].x + radius.x) && (location.x >= locations[i].x - radius.x) &&
(location.z <= locations[i].z + radius.z) && (location.z >= locations[i].z - radius.z))
{
hasArrived = true;
}
}
}
我只是在寻找一些关于如何使它工作的提示。尽管这似乎是一个非常简单的问题,但我现在不知所措。