【发布时间】:2012-12-15 11:52:49
【问题描述】:
我正在为一个学校项目开发一款赛车游戏。 使用 Visual Studio 10 专业版和 Irrlicht。 抱歉语法不好>.>,这是我的第一个问题,所以不确定它是否正确。
我希望它工作的方式是我在赛道上的不同点制作航点, 然后我运行我的航点检查,看看一辆车是否经过了它的下一个航点(下一个它“需要”过去),如果是,那么它会更新下一个航点,否则什么都没有。
我希望这会起作用的方式是,我创建一个从 n 到 n+1 的向量,然后在 n 处找到垂直于第一个向量的向量。然后我看看对象是在那个向量的前面还是后面。 我找到了一个Gamedev.net forumpost,它帮助我实现了这个功能:
void Engine::checkWaypoint(Vehicle* vehicle)
{
btVector3 vector = waypoints[vehicle->nextWaypoint];
// n
btVector3 nextVector = waypoints[vehicle->nextWaypoint + 1];
// n+1
vector = nextVector - vector;
// First vector
btVector3 pos = btVector3(vehicle->position.X,vehicle->position.Y,vehicle->position.Z);
float product = vector.dot(pos - waypoints[vehicle->nextWaypoint]);
// positiv = before, negative = behind
if(product < 0)
vehicle->nextWaypoint += 1;
}
目前的错误是:
在不超过新点的情况下更新下一个航点。
当它到达终点并重置时,它会停止在第一个航点上触发。
所以我的问题:
这是一个好方法吗?
我做对了吗?
【问题讨论】:
-
你应该accept an answer,或者如果没有人能说服你,请评论给出的答案,以获得更好的答案。