我有几个用于向目标射击子弹的公式,但当玩家从原始位置移动并且子弹按预期到达玩家的旧位置时,它都会崩溃。
当PlayerPosition == BulletPosition时,如果子弹未命中,如何使子弹保持正确的方向?我的问题是,一旦子弹到达它应该停止的地方,我需要一个新的公式来保持它的移动。
如果它击中了玩家,那很简单,删除该项目,但我似乎无法找到一个好的解决方案。下面是一些代码,现在它非常简单。
var movement = PlayerPosition - Position;
if (movement != Vector2.Zero)
movement.Normalize();
//var angle = Math.Atan2(movement.Y, movement.X);
Position += movement*_projectileMoveSpeed;
答案 0 :(得分:1)
您是否打算让子弹的速度受到与玩家距离的影响?
我只是保存速度,然后在未来的帧中使用它。在伪代码中:
to shoot a bullet:
direction is sign(PlayerPosition - Position)
in each frame:
for each bullet:
modify position by direction * projectileMoveSpeed
handle collision (player or screen edge)