我有一颗子弹可以弹到方块上。我想找出子弹是在x方向还是y方向弹跳。就像您在图像上看到的那样,仅几个像素的差异就让子弹将其弹向另一个方向。 (仅供参考:是的,子弹可以在我的游戏中弹起;-))

有谁知道这个问题的简单而可靠的解决方案?

非常感谢你的帮助

费利克斯

最佳答案

为了实现弹跳,您需要做两件事:

  • 碰撞检测
  • 更新项目符号的位置和速度

  • 步骤1:

    如果要正确检测碰撞,则必须计算矩形边框与将当前子弹位置与计算出的下一个子弹位置连接起来的直线的交点(就好像没有障碍物一样)。如果有多个交点,则以第一个撞到边界的交点为准。在Box2D中,您将使用raycast来获取交集。

    这里的答案将帮助您确定是否存在交叉点:Detect if line segment intersects square

    现在,您需要知道在矩形的哪一侧发生了碰撞。
    以下方法假定您已经知道有碰撞,但是不知道在哪里:

    当子弹的位置位于B,D,E或G区域时,很明显会击中哪个边界。

    在任何其他情况下都不清楚。让我为区域H解释一下:
  • 计算向量h(从子弹的位置到矩形的右下角)
  • 计算速度向量v的角度a(使用切线)
  • 计算h中的角度b(使用正切)
  • 比较a和b:如果a b碰撞在底侧

  • 对于区域A,C或F进行类似的处理。

    步骤2:

    如果有相交点,请将子弹的新位置设置为相交点(如果无法获得相交点,则更新该位置,就好像没有障碍物一样,但这会有点不准确)。
    如果碰撞发生在底部或顶部,请反转速度的y分量。
    如果碰撞发生在右侧或左侧,请反转速度的x分量。

    祝好运!

    关于iphone - Cocos2d:与块碰撞时计算子弹反弹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7220339/

    10-12 00:15