我很难让花栗鼠物理引擎做我想做的事。唯一可行的解决方案需要一些繁重的矢量数学。在为我的游戏的其他组件潜入那个兔子洞之前,我希望有人能以更好的方式来填补我的空白。想要的游戏玩法如下:
- 人物在自上而下的视图中在有限空间内移动
- 在角色面对的任何方向上,运动始终是一个恒定的速度
- 玩家点击屏幕,这会导致角色“转向”触摸的位置
基本思想就像开车。您不能立即掉头,而是必须先掉头。那辆车还必须保持恒定的速度。我该怎么做?额外的问题:您如何覆盖花栗鼠调用的任何方法来更新身体的位置,这是一个好主意吗?
我很难让花栗鼠物理引擎做我想做的事。唯一可行的解决方案需要一些繁重的矢量数学。在为我的游戏的其他组件潜入那个兔子洞之前,我希望有人能以更好的方式来填补我的空白。想要的游戏玩法如下:
基本思想就像开车。您不能立即掉头,而是必须先掉头。那辆车还必须保持恒定的速度。我该怎么做?额外的问题:您如何覆盖花栗鼠调用的任何方法来更新身体的位置,这是一个好主意吗?
有本教程介绍如何使用特殊配置的关节进行自上而下的控制:http: //chipmunk-physics.net/tutorials/ChipmunkTileDemo/
它基于 Chipmunk Pro,但关于控制角色的内容很容易适应原版 Chipmunk。如果您想查看一些 C 代码,非 Pro Chipmunk 源附带的“坦克”演示实现了几乎相同的东西。
您基本上希望更渐进地旋转播放器的方向。您可以以恒定速率执行此操作,因此当您点击屏幕时,它将开始以恒定速率旋转,直到达到正确的方向。这将给出一个圆形转弯圈。但是,这会影响您的位置,因此您必须继续转动,直到您与您点击的位置发生碰撞。您将要走的路径类似于游戏 Achtung die kurve 的路径。
因此,您必须保存玩家的位置和方向(x、y 和 phi 坐标)。要确定是否停止转动,您可以执行以下操作:
dx = playerx - tapx;
dy = playery - tapy;
targetAngle = atan2(dy,dx);
if (phi > targetAngle)
{
if (phi - targetAngle > PI) omega = rotate;
else omega = -rotate;
}
else if (phi < targetAngle)
{
if (targetAngle - phi > PI) omega = -rotate;
else omega = rotate;
}
else omega = 0;