2

我正在使用 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是我的“英雄”精灵位置。
  • theVoidVector2 (700,700),当我设置shotPosition = theVoid镜头消失时。
4

1 回答 1

4

镜头永远不会消失,因为您正在更新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 轴始终是静止的,那么与它们是否可以在屏幕上运行相比,这可以简化事情。

于 2012-12-19T16:07:24.660 回答