我如何检查 xna 上是否没有按键输入

How do i check if there are no key inputs on xna

public class Game1 : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    Texture2D walkRight, walkUp, walkLeft, walkDown, currentWalk, TitleScreen, stand;
    Rectangle destRect;
    Rectangle sourceRect;
    KeyboardState ks;
    Vector2 position = new Vector2();
    bool isGrounded;
    bool isStanding;
    float fallSpeed = 5;

    enum GameStates { Titlescreen, Playing, PlayerDead, GameOver };
    GameStates gameStates = GameStates.Titlescreen;

    float elapsed;
    float delay = 200f;
    int frames = 0;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
    }

    protected override void Initialize()
    {
        destRect = new Rectangle(50, 50, 50, 50);
        base.Initialize();
    }

    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);

        walkRight = Content.Load<Texture2D>("walkRight");
        walkUp = Content.Load<Texture2D>("walkUp");
        walkLeft = Content.Load<Texture2D>("walkLeft");
        walkDown = Content.Load<Texture2D>("walkDown");
        TitleScreen = Content.Load<Texture2D>("TitleScreen");
        stand = Content.Load<Texture2D>("SpriteStill");
        currentWalk = walkRight;
    }

    protected override void UnloadContent()
    {
    }

    private void Animate(GameTime gameTime)
    {
        elapsed += (float)gameTime.ElapsedGameTime.TotalMilliseconds;

        if (elapsed >= delay)
        {
            if (frames >= 3)
            {
                frames = 0;
            }
            else
            {
                frames++;
            }
            elapsed = 0;
        }
        sourceRect = new Rectangle(50 * frames, 0, 50, 50);
    }

    protected override void Update(GameTime gameTime)
    //{
        //switch (gameStates)
    {
        if (position.Y >= Window.ClientBounds.Height - 50)
        {
            position.Y = Window.ClientBounds.Height - 50;
            isGrounded = true;
        }
        if (position.X >= Window.ClientBounds.Width - 50)
        {
            position.X = Window.ClientBounds.Width - 50;
        }
        if (position.X <=0)
        {
            position.X = 0;
        }
        if (position.Y <= 0)
        {
            position.Y = 0;
        }

        ks = Keyboard.GetState();

        if (ks.IsKeyDown(Keys.Right))
        {
            position.X += 3f;
            currentWalk = walkRight;
        }
        if (ks.IsKeyDown(Keys.Left))
        {
            position.X -= 3f;
            currentWalk = walkLeft;
        }

        if (ks.IsKeyDown(Keys.Down))
        {
            position.Y += 3f;
            currentWalk = walkDown;
        }

        Animate(gameTime);

        destRect = new Rectangle((int)position.X, (int)position.Y, 50, 50);

        FallManagement(gameTime);

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();
        spriteBatch.Draw(currentWalk, destRect, sourceRect, Color.White);
        spriteBatch.End();

        base.Draw(gameTime);
    }

    void FallManagement(GameTime gameTime)
    {
        position.Y += fallSpeed;
        if (isGrounded == false)
        {
            fallSpeed = 5;
        }

        if (ks.IsKeyDown(Keys.Up) && isGrounded)
        {
            fallSpeed -= 40;

            isGrounded = false;
        }
    }
}

我目前正在为一年的大学课程创建一个非常基础的 XNA 平台游戏。我目前正在尝试添加一条声明,说明如果没有按下任何键,则为静止不动的角色加载纹理 2d,但我不确定如何检查是否根本没有按下任何键。基本上我想检查角色是否在移动,如果没有,角色的纹理将设置为静止不动的 png,有谁知道我该怎么做。我把整个代码都放在了这个问题中,因为我没有使用字符class,而且我目前的编码水平非常基础。

也许这样的东西对你有用:

ks = Keyboard.GetState();
bool isMoving = false;

if (ks.IsKeyDown(Keys.Right))
{
    position.X += 3f;
    currentWalk = walkRight;
    isMoving = true;
}
if (ks.IsKeyDown(Keys.Left))
{
    position.X -= 3f;
    currentWalk = walkLeft;
    isMoving = true;
}

if (ks.IsKeyDown(Keys.Down))
{
    position.Y += 3f;
    currentWalk = walkDown;
    isMoving = true;
}

if (!isMoving)
{
    //Do whatever you need to do when the player is still here
}

基本上在您处理的任何键被按下时设置一个标志,然后在没有按键被按下时使用该标志来执行您需要做的事情。

或者,如果您想检查是否没有按下任何键:

if (ks.GetPressedKeys() == null || ks.GetPressedKeys().Length == 0)
{
     //No keys pressed at all. (not sure if GetPressedKeys returns null
     //or zero length array, check when in debug then remove one.
}