Managing content
Two separate projects get created when you start a new XNA Game Studio project in Visual Studio. The first is your actual game project, and the second is a special type of project called a content project. This is shown in the following screenshot:
Any non-code pieces of your game, including graphical resources, sounds, fonts, and any number of other item types (you can define your own content interpreters to read things such as level maps) are added to the content project. This project gets built along with the code in your primary project and the two are combined into a single location with everything your game needs to run.
When the content project is built, each item is examined by a content importer—a bit of code that interprets the raw data of the content file, a .jpg
image for example, and converts it into a format that can be passed into a content processor. The content processor's job is to convert this file into a managed code object that can be stored on a disk and read directly into memory by XNA's ContentManager
class. These compiled binary files carry the .xnb
file extension and are located, by default, in a subdirectory of your game's executable folder called Content
.
Tip
ContentManager
Though its primary job is to load the content resources into memory at runtime, ContentManager
does more than that. Each instance of ContentManager
maintains a library of all of the content that has been loaded. If multiple requests to load the same content file are sent to a ContentManager
instance, it will only load the resource from the disk the first time. The remaining requests are supplied with a reference to the item that already exists in memory.
Out of the box, XNA contains importers/processors for 3D meshes, images, fonts, audio, shaders, and XML data. We will create the content used for Speller with an image editor and the tools built into XNA Game Studio.