Why is Spritebatch drawing my Textures out of order?

Posted by Andrew on Game Development See other posts from Game Development or by Andrew
Published on 2012-11-25T03:57:45Z Indexed on 2012/11/25 5:18 UTC
Read the original article Hit count: 371

Filed under:
|

I just started working with XNA Studio after programming 2D games in java. Because of this, I have absolutely no experience with Spritebatch and sprite sorting. In java, I could just layer the images by calling the draw methods in order. For a while, my Spritebatch was working fine in deferred sorting mode, but when I made a change to one of my textures, it suddenly started drawing them out of order. I have searched for a solution to this problem, but nothing seems to work. I have tried adding layer depths to the sprites and changing the sort mode to BackToFront or FrontToBack or even immediate, but nothing seems to work. Here is my drawing code:

    protected override void Draw(GameTime gameTime) {
        GraphicsDevice.Clear(Color.Gray);
        Game1.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null);

        for (int x = 0; x < 5; x++) {
            for (int y = 0; y < 5; y++) {
                region[x, y].draw(((float)w / aw)); // Draws the Tile-Based background
            }
        }

        player.draw(spriteBatch, ((float)w / aw));//draws the character (This method is where the problem occurs)
        enemy.draw(spriteBatch, (float)w/aw); // draws a basic enemy
        Game1.spriteBatch.End();
        base.Draw(gameTime);
    }

player.draw method:

public void draw(SpriteBatch sb, float ratio){
        //draws the player base (The character without hair or equipment)
        sb.Draw(playerbase[0], new Rectangle((int)(pos.X - (24 * ratio)), (int)(pos.Y - (48 * ratio)), (int)(48 * ratio), (int)(48 * ratio)), new Rectangle(orientation * 48, animFrame * 48, 48, 48), Color.White,0,Vector2.Zero,SpriteEffects.None,0);
        //draws the player's hair
        sb.Draw(playerbase[3], new Rectangle((int)(pos.X - (24 * ratio)), (int)(pos.Y - (48 * ratio)), (int)(48 * ratio), (int)(48 * ratio)), new Rectangle(orientation * 48, animFrame * 48, 48, 48), Color.White, 0, Vector2.Zero, SpriteEffects.None, 0);
        //draws the player's shirt
        sb.Draw(equipment[0], new Rectangle((int)(pos.X - (24 * ratio)), (int)(pos.Y - (48 * ratio)), (int)(48 * ratio), (int)(48 * ratio)), new Rectangle(orientation * 48, animFrame * 48, 48, 48), Color.White, 0, Vector2.Zero, SpriteEffects.None, 0);
        //draws the player's pants
        sb.Draw(equipment[1], new Rectangle((int)(pos.X - (24 * ratio)), (int)(pos.Y - (48 * ratio)), (int)(48 * ratio), (int)(48 * ratio)), new Rectangle(orientation * 48, animFrame * 48, 48, 48), Color.White, 0, Vector2.Zero, SpriteEffects.None, 0);
        //draws the player's shoes
        sb.Draw(equipment[2], new Rectangle((int)(pos.X - (24 * ratio)), (int)(pos.Y - (48 * ratio)), (int)(48 * ratio), (int)(48 * ratio)), new Rectangle(orientation * 48, animFrame * 48, 48, 48), Color.White, 0, Vector2.Zero, SpriteEffects.None, 0);
    }

the game has a top-down perspective much like the early legend of zelda games. It draws sections of the texture depending on which direction the character is facing and the animation frame. However, instead of drawing the character in the order the draw methods are called, it ends up drawing the character out of order. Please help me with this problem.

© Game Development or respective owner

Related posts about graphics

Related posts about spritebatch