c – 我如何找到一个物体在航点之前或之后?

c – 我如何找到一个物体在航点之前或之后?,第1张

概述我正在为一个学校项目的赛车游戏工作. 使用Visual Studio 10 pro和Irrlicht. 对不起语法错误>.>,这是我的第一个问题,所以不确定它是否正确. 我希望它如何工作是我在赛道上的不同点制作航点, 然后我运行我的航路点检查以查看汽车是否超过了下一个航点(下一个“需要”过去),如果是,那么它会更新下一个航点,否则什么都没有. 我希望这将起作用的方式是,我制作一个从n到n 1的向量 我正在为一个学校项目的赛车游戏工作.
使用Visual Studio 10 pro和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;}

目前的错误是:

>更新下一个点而不是经过一个新点.
>当它到达终点并重置时,它会停止在第一个航路点上触发.

所以我的问题:

这是一个很好的方法吗?

我做得对吗?

解决方法 你的代码测量了从当前路径到下一个传感器的距离,玩家是.然而,如果两个连续段的矢量(例如)在直角处,则算法可以一次跳过多个路点. (例如,如果你划过下一个路的点,那么它可能会沿着道路的中间向下延伸,这意味着玩家可以向前和向后穿过它,同时朝着那个方向点行驶).

某种类型的边界体积可能起作用,要么是到达航点的距离(检查它是否小于道路宽度的2倍),或者是你在点之间计算的向量的距离.

(或者你可以通过添加更多的航点来逃避)

至于为什么它在你上圈时不起作用,似乎你只需在路点上添加一个以找到下一个.你需要以总计计算模数:

next_waypoint = (vehicle->nextWaypoint + 1) % num_waypoints;
总结

以上是内存溢出为你收集整理的c – 我如何找到一个物体在航点之前或之后?全部内容,希望文章能够帮你解决c – 我如何找到一个物体在航点之前或之后?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1230722.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存