XNA has a really nice way to integrate different logical pieces of code (such as
your soon-to-be-created SpriteManager
class) into
your application. The GameComponent
class allows
you to modularly plug any code into your application and automatically wires that
component into the game loop's Update
call (i.e.,
after your game's Update
call is made, all
associated GameComponent
classes have their
Update
methods called).
Create a new game component by right-clicking on the project in Solution Explorer and selecting Add â New Item. Select Game Component as the template from the list on the right side of the window, and name the game component file SpriteManager.cs.
Looking at the code generated for your new game component, you will notice that it
contains constructor, Initialize
, and Update
methods. Also, the class derives from GameComponent
.
If you want to create a game component that will also be wired into the game
loop's Draw
method so that your component has the
ability to draw items as well, you can do so by instead deriving from the DrawableGameComponent
class.
You're going to be using your sprite manager to invoke the Draw
methods of all the sprites it manages, so you'll
need to have this game component wired up to the game's Draw
method. Change the base class of your game component to DrawableGameComponent
to enable this
functionality:
public class SpriteManager : Microsoft.Xna.Framework.DrawableGameComponent
After changing the base class, you'll need to create an override for the Draw
method in your game component:
public override void Draw(GameTime gameTime) { base.Draw(gameTime); }
To add your newly created component to your game and have the Update
and Draw
methods in your component wired into your game loop, you also have to add the
component to the list of components used by your Game1
class. To do this, you'll need to add a class-level variable of
the type SpriteManager
to your Game1
class:
SpriteManager spriteManager;
Then, in your Game1
class's Initialize
method, you need to instantiate the
SpriteManager
object, passing in a reference
to your Game1
class (this
) to the constructor. Finally, add the object to the list of
components in your Game1
class:
spriteManager = new SpriteManager(this); Components.Add(spriteManager);
Bam! You're wired up and ready to go. When the Update
and Draw
methods of your
game are called, they will also now be called in your new game component.
You can see how easy it is to add a GameComponent
to your game. Imagine the possible uses for this kind
of tool. If, for example, you built a component to draw the framerate and other
performance-related debug information on the screen, you could add it to any game
with only two lines of code! Very cool stuff.
Get Learning XNA 3.0 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.