物理学,像汽车一样转动

时间:2013-04-06 20:00:00

标签: cocos2d-iphone physics chipmunk car-analogy

我很难让Chipmunk物理引擎做我想做的事。似乎工作的唯一解决方案需要一些重载矢量数学。在为我的游戏的其他组成部分潜入那个兔子洞之前,我希望有人可以让我更好地解决这个问题。所需的游戏玩法如下:

  • 角色在自上而下的视图中围绕有限空间移动
  • 在角色面对的任何方向上,移动始终是一个恒定的速度
  • 玩家点击屏幕,导致角色“转向”触摸的位置

基本理念就像驾驶汽车一样。你无法立即转身,而必须首先进行掉头转弯。那辆车还必须保持恒定的速度。我怎么能这样做?额外的问题:你怎么能覆盖花栗鼠调用更新身体位置的任何方法,这是个好主意吗?

2 个答案:

答案 0 :(得分:1)

有关于如何使用特殊配置关节进行自上而下控制的教程: http://chipmunk-physics.net/tutorials/ChipmunkTileDemo/

它基于Chipmunk Pro,但控制角色的东西很容易适应香草花栗鼠。非Pro Chipmunk源附带的“Tank”演示实现了几乎相同的功能,如果你想看到它的一些C代码。

答案 1 :(得分:0)

你基本上想要更加渐进地旋转玩家的方向。您可以以恒定速率执行此操作,因此当您点击屏幕时,它将以恒定速率开始旋转,直到它达到正确的方向。这将产生圆形转弯圆圈。但是这会影响你的位置,所以你必须继续转弯,直到你与你所拍摄的位置发生碰撞。 你将旅行的路径类似于游戏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;