Verfasst von: bletra | 24. Juni 2011

GameComponents in XNA

Autoren: Daniel Träder und Sebastian Koralewski

Bei der Entwicklung eines XNA-Spiels  sind von Entwicklungsstufe zu Entwicklungsstufe immer mehr Objekte zu zeichnen. Diese alle in einer Klasse zu verwirklichen führt  dazu, dass diese schnell unübersichtlich wird. Um dieses Problem modular zu lösen stellt XNA die sogenannten „GameComponent“s zu Verfügung.  Damit lässt sich beispielsweise die Hintergrundkarte unseres Autorennspiels verwirklichen.

public class MapComponent : Microsoft.Xna.Framework.GameComponent
{
  public MapComponent(Game game) : base(game)
  {
  }

  public override void Initialize()
  {
    base.Initialize();
  }

  public override void Update(GameTime gameTime)
  {
    base.Update(gameTime);
  }
}

Die Funktionen von GameComponents werden automatisch zur passenden Zeit vom XNA Framework aufgerufen, sobald man sie zu einer Collection von Components hinzugefügt hat.

GameComponents realisieren das Initialisieren und das Updaten einer Komponente. Um eine Komponente periodisch mitzeichnen zu lassen, ist das Interface DrawableGameComponent zu verwenden. Dieses erweitert die Klasse um die Funktionen

– Draw(),
– LoadContent(),
– UnloadContent().

Um nun verschiedene Karten benutzen zu können, wird der Konstruktor um einen Identifier erweitert, welcher in der Funktion „LoadContent“ genutzt wird, um die Textur der Karte zu laden. In der Funktion „Draw“ wir die Karte anschließend gezeichnet.

public class MapComponent : Microsoft.Xna.Framework.DrawableGameComponent
{
  public MapComponent(Game game, string mapIdentifier)
    : base(game)
  {
  }

  public override void Initialize()
  {
    base.Initialize();
  }

  protected override void LoadContent()
  {
    _spriteBatch = new SpriteBatch(base.Game.GraphicsDevice);
    _map = base.Game.Content.Load<Texture2D>(_mapId);
  }

  protected override void UnloadContent()
  {
  }

  public override void Update(GameTime gameTime)
  {
  }

  public override void Draw(GameTime gameTime)
  {
    _spriteBatch.Begin();
    _spriteBatch.Draw(_map, new Vector2(0, 0), _map.Bounds, Color.White, 0f, new Vector2(0, 0), 1f, SpriteEffects.None, 1f);
    _spriteBatch.End();
  }
}

Um diese GameComponent nun in der Hauptklasse des Spieles einzufügen muss folgendes getan werden:

MapComponent map;
public Game1()
{
  map = new MapComponent(this, „PFAD/ZUR/BILD_RESSOURCE “);
  Components.Add(map);
}

Das war alles, den Rest erledigt XNA automatisch.

Ein gutes Tutorial zu XNA-GameComponet findet man unter: http://www.xnamag.de/article.php?aid=16

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Kategorien

%d Bloggern gefällt das: