Cocos2d:计算与块碰撞时子弹的弹跳

Kra*_*eFx 2 iphone cocos2d-iphone game-physics ios

我有一颗可以反弹的子弹.我想知道子弹是朝x方向还是y方向反弹.就像你在图像上看到的那样,只有几个像素的差异让子弹反弹到另一个方向.(仅供参考:是的,子弹可以在我的游戏中反弹;-))

http://i.stack.imgur.com/5EmGz.png

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

非常感谢你的帮助

费利克斯

Fel*_*lix 5

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

  1. 碰撞检测
  2. 更新子弹的位置和速度

步骤1:

如果要正确检测碰撞,则必须计算矩形边界与连接当前项目符号位置与计算的下一个项目符号位置的线的交点(就好像没有障碍物一样).如果有多个交叉点,请选择第一个碰到边界的交叉点.在Box2D中,您将使用光线投射来获得交叉点.

这里的答案将帮助您确定是否存在交叉点:检测线段是否与正方形相交

现在您需要知道矩形的哪一侧发生了碰撞.以下方法假设您已经知道存在冲突,但不知道在哪里:

碰撞检测

当子弹的位置在区域B,D,E或G时,其明显的边界将被击中.

在任何其他情况下,它都不是那么清楚.让我解释一下H区:

  1. 计算向量h(从子弹的位置到矩形的右下角)
  2. 计算速度矢量v之外的角度a(使用tangens)
  3. 计算h中的角度b(使用tangens)
  4. 比较a和b:如果<b碰撞位于右侧,如果> b碰撞位于底部

在区域A,C或F的情况下类似地继续进行.

第2步:

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

祝好运!