【问题标题】:Physics, turn like a car物理学,像汽车一样转动
【发布时间】:2013-03-29 03:16:03
【问题描述】:

我很难让 Chipmunk 物理引擎做我想做的事。唯一可行的解​​决方案需要一些繁重的矢量数学。在为我的游戏的其他组件潜入那个兔子洞之前,我希望有人能以更好的方式来填补我的空白。想要的玩法如下:

  • 角色在自上而下的视图中在有限空间内移动
  • 无论角色面向什么方向,运动始终是一个恒定的速度
  • 玩家点击屏幕,这会使角色“转向”到触摸的位置

基本概念就像开车。您不能立即掉头,而是必须先掉头。那辆车还必须保持恒定的速度。我该怎么做?额外的问题:如何覆盖花栗鼠调用的任何方法来更新身体的位置,这是个好主意吗?

【问题讨论】:

    标签: cocos2d-iphone physics chipmunk car-analogy


    【解决方案1】:

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

    它基于 Chipmunk Pro,但控制角色的内容很容易适应原版 Chipmunk。如果您想查看一些 C 代码,非 Pro Chipmunk 源代码附带的“Tank”演示实现了几乎相同的功能。

    【讨论】:

    • 再次感谢您的帮助。这套教程正是我想要的。
    【解决方案2】:

    您基本上希望更渐进地旋转播放器的方向。您可以以恒定的速度执行此操作,因此当您点击屏幕时,它将开始以恒定的速度旋转,直到达到正确的方向。这将给出一个圆形转弯圈。但是,这会影响您的位置,因此您必须继续转动,直到您与您点击的位置发生碰撞。 您将要走的路类似于 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;
    

    【讨论】:

    • 我不确定我是否理解此示例中的 phi 和 omega 是什么,您愿意详细说明吗?
    • Phi 是玩家移动的角度,因为总速度是恒定的(Vx = v * cos(phi), Vy = v * sin(phi)),我称之为旋转速度欧米茄,所以 phi(t+1) = phi(t) + timeStep * 欧米茄。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多