7
votes

I'm making a little game based on XNA game development's tutorial game "shooter"... after a bit of trial and error, I made my own animated sprite that i can move around the screen. The problem is, he's always facing right.

How can i change this (image below) so that he faces the right direction every time the key event is pressed?!

I'm pretty new to C# as you might have guessed, and I realize this may be more complicated than i thought, so i just need to know how to make the sprite face right when moving right and left when he's moving left.

image

Thank you in advance.

3
never, never call your functions something like IDFK. It'll be hell to maintain. - Dhaivat Pandya
@Dhaivat Pandya: Pretty sure that was just to get the point across, i.e., "I don't F@#$ing know". - Ed S.
That was a placeholder for a working event that would change the player's direction... there's nothing in this document named IDFK - Zanrkvil

3 Answers

7
votes

You can also do this by passing the SpriteEffects.FlipHorizontally option to yourSpriteBatch.Draw() method. But as others have said this will have more overhead than using a sprite sheet.

2
votes

Usually a sprite sheet will contain images for each direction. You can flip the image at runtime, but it adds image processing that is unnecessary. I would suggest to you that you simply create a sprite sheet up front with each animation baked in and just figure out which frame to display at runtime.

See an example of a simple sprite sheet here

0
votes
SpriteEffects s = SpriteEffects.FlipHorizontally;
int smX = 200; //smx is the 'x' coordinates.

    public void runChar()
    {
        if (Keyboard.GetState().IsKeyDown(Keys.Left))
        {
            smX -= 2;
            s = SpriteEffects.FlipHorizontally;
            //oposite direction.
        }
        else if (Keyboard.GetState().IsKeyDown(Keys.Right))
        {
            smX += 2;
            s = SpriteEffects.None;
            //original direction.
        }
    }

spriteBatch.Draw(sM, new Rectangle(smX, 200, 100, 100), null, Color.White, rotation, new Vector2(50, 50), s, 0f);

This will 'flip' the texture left and right.