我正在构建一个简单的2D游戏,其中蛇可以向玩家吐火球,他必须避免这些。玩家四处移动并且蛇是静止的,但它围绕其中心旋转以跟随玩家的移动。
在某些时候,蛇会吐出火球,这是一个动态的身体,附有CircleShape传感器夹具。 火球应该以每秒2个单位的速度线性移动。由于攻击方向总是不同,我根据旋转角度分别设置速度的x和y分量:
fireball_velocity.x = Snake.FIREBALL_VELOCITY * MathUtils.cos(angle);
fireball_velocity.y = Snake.FIREBALL_VELOCITY * MathUtils.sin(angle);
然后将得到的速度设置为新创建的火球体作为线速度:
body.setLinearVelocity(fireball_velocity);
之后火球体不受任何力或冲动的影响(重力比例设为0)
50%的时间(或者更多)这个工作得很好,但有时(也经常)火球速度非常高,如此之高,甚至可以通过玩家身体而不会被检测到!
我已经使用调试器检查了fireball_velocity.x和fireball_velocity.y - 它们总是在-2.00f和2.00f之间以及火球速度也变高的时候。因此,即使提供线性速度值总是很小,有时box2d引擎也会错误地处理...
我还试图让火球半径更大,以防万一它变小或计算,但没关系。
根据手册中的建议,Box2d坐标保持在0到10个单位之间。
什么可能导致这个问题?