Advertise with us

Change texture on key down

private void CheckKeyboardAndUpdateMovement()
{
    KeyboardState keyboardState = Keyboard.GetState();
    if (keyboardState.IsKeyUp(Keys.Left)) { ChangeTexture(1); }
    if (keyboardState.IsKeyUp(Keys.Right)) { ChangeTexture(2); }
    if (keyboardState.IsKeyDown(Keys.Left))
    {
        Movement -= Vector2.UnitX;
        ChangeTexture(3);
    }
    if (keyboardState.IsKeyDown(Keys.Right))
    {
        Movement += Vector2.UnitX;
        ChangeTexture(4);
    }
    if ((keyboardState.IsKeyDown(Keys.Space) || keyboardState.IsKeyDown(Keys.Up)) && IsOnFirmGround())
    {
        Movement = -Vector2.UnitY * JumpHeight;
    }
}

Here it is my method to get keyboard state and change texture based on which key is pressed.

it works if direction are pressed, but doesn't make its own job when nothing is pressed (just because both the IsKeyUp are true). Only the cases' order prevents the static texture to be shown while moving the sprite... My question is, how can I make a clean solution of this problem?

Last updated:12/12/2013 2:08:54 AM

1 Answers

Pravesh Singh
Pravesh Singh

Hi Ankit,
You can try this :


enum Direction { Left = 1, Right = 2}
Direction dir = Direction.Left; //or whatever
 
private void CheckKeyboardAndUpdateMovement()
{
    KeyboardState keyboardState = Keyboard.GetState();
    ChangeTexture((int)dir);
    if (keyboardState.IsKeyDown(Keys.Left))
    {
        Movement -= Vector2.UnitX;
        ChangeTexture(3);
        dir = Direction.Left;
    }
    if (keyboardState.IsKeyDown(Keys.Right))
    {
        Movement += Vector2.UnitX;
        ChangeTexture(4);
        dir = Direction.Right;
    }
    if ((keyboardState.IsKeyDown(Keys.Space) || keyboardState.IsKeyDown(Keys.Up)) && IsOnFirmGround())
    {
        Movement = -Vector2.UnitY * JumpHeight;
    }
}

Answer