我正在用XNA Game Studio 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;


解决此问题的一种方法是根据@jonhopkins注释检查玩家的位置shotPosition.X。如果玩家能够以与射击相同的速度移动,他们可以跟随它,然后射击将永远不会消失,这可能是您想要的,也可能不是。

您的另一个选择是存储射击位置,然后进行比较:

if (isShotted == true && (shotPosition.initialX+150 >= shotPosition.currentX) )


但是,请确保您根据玩家和对象如何围绕坐标系移动来考虑这一点。如果您的播放器相对于x轴始终静止不动,那么与它们可以绕屏幕运行相比,可以简化事情。

关于c# - 使用XNA Game Studio在2D游戏中按键拍摄,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13956112/

10-11 05:19