Sprite Splitting with SpriteBatch
Someone over in the XNA forums asked a question about how to make sprite explosions like those in the old Defender arcade game, where the sprite is broken into pieces and exploded everywhere.
This effect can be done using nothing more than the XNA SpriteBatch class. One of the overloaded Draw() methods allows you to pass a source rectangle. When drawing a sprite you can use the source rectangle to grab just a part of it. So it’s a simple matter to use multiple draw calls on a single sprite to draw little pieces of it, like so:
// draw parts of the sprite int xInc = 8; int yInc = 8; float spacing = 1.5f; // draw parts of the sprite for (int x = 0; x < face.Width; x += xInc) for (int y = 0; y < face.Height; y += yInc) { Vector2 position = new Vector2(100 + x * spacing, 150 + y * spacing); Rectangle source = new Rectangle(x, y, xInc, yInc); spriteBatch.Draw(face, position, source, Color.White); }
“Multiple draw calls” sounds bad, but SpriteBatch is able to batch up the draw calls so you shouldn’t notice any real effect on performance.
You can download a sample XNA project to see this in action. The project also includes a SpriteExploder class that will automatically explode your sprite into multiple pieces and throw them about the screen.
3 thoughts on “Sprite Splitting with SpriteBatch”
Can we get a screenshot?
Screenshot added.
Very cool! The screenshot really adds to the overall coolness too 🙂
Comments are closed.