我正在使用XNA游戏工作室4.0开发一款2D游戏,我需要让我的"英雄"精灵拍摄一个射击精灵,这是一个矩形。
当我按左键进行射击时,射击是从我的播放器开始的。到目前为止,还可以,但问题是它永远不会停止 - 它的位置永远不会theVoid
.
这是我的拍摄代码:
protected override void Update(GameTime gameTime)
{
if (Keyboard.GetState().IsKeyDown(Keys.LeftControl) && isShotted == false)
{
isShotted = true;
shotPosition = playerPosition;
}
if (isShotted == true && (shotPosition.X <= shotPosition.X+150) )
{
shotPosition.X += shotSpeed.X * (float)gameTime.ElapsedGameTime.TotalSeconds;
}
else
{
isShotted = false;
shotPosition = theVoid;
}
}
一些澄清:
-
playerPosition
是我的"英雄"精灵位置。 -
theVoid
Vector2 (700,700)
,当我设置shotPosition = theVoid
镜头消失时。
永远不会消失,因为每次更新都会shotPosition.x
更新。您正在检查:
if (isShotted == true && (shotPosition.X <= shotPosition.X+150) )
然后在该if
中增加shotPosition.X
:
shotPosition.X += shotSpeed.X * (float)gameTime.ElapsedGameTime.TotalSeconds;
解决此问题的一种选择是对照玩家位置检查shotPosition.X
- 每条@jonhopkins评论。 如果玩家可以以接近与射击相同的速度移动,他们可以跟随它,然后射击永远不会消失,这可能是也可能不是你想要的。
您的另一种选择是存储射击的位置,并比较以下内容:
if (isShotted == true && (shotPosition.initialX+150 >= shotPosition.currentX) )
不过,请确保您从玩家和对象在坐标系中移动的方式来考虑这一点。如果您的播放器在x轴上始终是静止的,那么与他们可以在屏幕上运行相比,这可以简化事情。