Windows Dev Center

Schreiben spritebasierter Spiele

Das Erstellen eines 2-D-Actionspiels bildet eine Art Initiationsritus für Entwickler auf jeder Plattform.

Schreiben von 2-D-Spielen

Es gibt viele Möglichkeiten, mit dem Schreiben von 2-D-Spielen zu beginnen: Letztlich muss lediglich ein Bild an einer bestimmten Position auf dem Bildschirm angezeigt werden und auf Benutzereingaben reagieren.

Als iOS-Entwickler haben Sie Spiele möglicherweise nur mit UIImage-Steuerelementen geschrieben, oder vielleicht haben Sie eigene Spriteroutinen in OpenGL ES verwendet. Beim Portieren einer App nach Windows 8 besteht keine direkte Korrelation zwischen den iOS- und Windows-Technologien, daher müssen Sie die Vor- und Nachteile mehrerer verschiedener Methoden gegeneinander abwägen. Während beispielsweise Spiele, für die XAML-Canvas- oder HTML-Canvas-Lösungen verwendet werden, schnell und einfach zu entwickeln sind, fehlt ihnen vielleicht die nötige Leistung für komplexe Action. Andererseits kann die Verwendung von DirectX und C++ für einfachere Apps völlig übertrieben erscheinen.

Im Folgenden finden Sie eine kurze Zusammenfassung der Windows 8-Technologie, die den normalen Mustern der iOS-Entwicklung am ähnlichsten ist. Es besteht keine direkte Übereinstimmung, aber Sie erhalten eine Vorstellung von den Zusammenhängen.

iOS-TechnologieWindows 8-Technologie
UIKit (UIImage, UIButton, UILabel usw.)XAML-Canvas oder HTML-Canvas
OpenGL ES-Code, mit als Vierecken gerenderten oder Punkt-SpritesDirectX, mit als Texturen gerenderten Sprites
SpriteKitDirectX, mit als Texturen gerenderten Sprites
Drittanbieter-Framework, z. B. Cocos2DDrittanbieter-Framework, z. B. Cocos2D-X
Drittanbieter-Spieleerstellungstool, z. B. Unity3DDrittanbieter-Spieleerstellungstool, z. B. Unity3D

 

Einführung in MonoGame

MonoGame stellt eine geeignete Lösung für iOS-Entwickler dar, die nach einer einfachen Sprite-Bibliothek suchen. MonoGame ist ein Open-Source-C#-Wrapper für DirectX, mit dem spritebasierte 2-D-Spiele einfacher geschrieben werden können. Es bietet einen guten Kompromiss zwischen Leistung und Bedienungsfreundlichkeit.

Wenn Sie bereits über Erfahrungen mit dem Schreiben einfacher Spiele für Windows, Windows Phone oder Xbox verfügen, sind Sie mit dem XNA-Spieleframework wahrscheinlich vertraut. XNA wird unter Windows und Windows Phone nicht mehr unterstützt, doch wird mit MonoGame versucht, die Lücke zu füllen. MonoGame wurde ursprünglich als plattformübergreifende Version von XNA konzipiert. Nun können Sie mit MonoGame jedes bestehende XNA-Projekt fertig stellen, aber auch Spiele für Windows komplett neu schreiben, die auch für Windows Phone, iOS und Android geeignet sind.

Erstellen einer App mit MonoGame

MonoGame unterstützt Visual Studio Express-Editionen und kann daher sofort zum Schreiben spritebasierter Spiele für Windows 8 verwendet werden. Sobald Sie MonoGame installiert haben, bietet Visual Studio mehrere neue Projektvorlagen. Die optimale Leistung erzielen Sie mit der MonoGame-Vorlage für Windows Store-Projekte. Wenn Sie jedoch XAML-Steuerelemente verwenden möchten (vielleicht zum Bereitstellen von Textüberlagerungen, Schaltfläche oder anderen Steuerelementen), können Sie auch ein MonoGame-Projekt für Windows Store (XAML) verwenden.

MonoGame-Projektvorlage

Das mit der Vorlage erstellte C#-Projekt ist einfach zu verstehen und kann von Ihnen mit verschiedenen Methoden implementiert werden, darunter LoadContent(), Update() und Draw().

Mit MonoGame werden Sprites gerendert, jedoch muss eine Besonderheit beachtet werden. Die zu zeichnenden Bilder erwartet MonoGame im XNB-Format. Sie können nicht einfach PNG-Dateien einfügen, um diese zu rendern. Mit XNA konnte ein Projekt PNG-Dateien enthalten, aus denen über eine Inhaltspipeline automatisch XNB-Dateien erstellt wurden. MonoGame unterstützt nun eine eigene Inhaltspipeline (Informationen zu GitHub finden Sie hier). Alternativ können Sie folgendermaßen vorgehen:

Installieren Sie Visual Studio 2012 Express for Phone. Diese Anwendung unterstützt nach wie vor das Erstellen von XNA-Apps für Windows Phone 7. Dies mag am Anfang etwas umständlich erscheinen, aber es funktioniert. Sie müssen lediglich ein neues Windows Phone 7-XNA-Projekt erstellen, Ihre PNG-Grafiken einfügen, das Projekt erstellen (es muss nicht ausgeführt werden, Erstellen genügt) und dann die XNB-Dateien in das neue Windows 8-Projekt kopieren. Derselbe Ansatz kann für Soundeffekte und Shader verwendet werden.

C#-Beispielcode

Im Folgenden finden Sie den Anfang eines Spiels, in dem das Sprite des Spielers gegen Zielsprites stoßen und diese zerstören muss, um Punkte zu erhalten. Dies ändert die Spielewelt von Grund auf. Zunächst erstellen Sie eine Liste zum Speichern der Speicherorte der Zielsprites und eine Variable zum Speichern des Spielerobjekts:


        private List<Vector2> ball_locations;
        private Vector2 player;

Anschließend initialisieren Sie sie in der Initialize()-Methode:


        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            base.Initialize();

            ball_locations = new List<Vector2>();

            for (float y = 40; y < 700; y += 60)
                for (float x = 100; x < 500; x += 60)
                {
                    ball_locations.Add(new Vector2(x,y));
                }

            player = new Vector2(1000, 400);
        }

Falls Sie es noch nicht erraten haben: Vector2 ist ein neuer Datentyp, der X- und Y-Koordinaten enthält. Zusammen mit Vector3 ist dieser beim Schreiben von Spielen enorm nützlich!

In der LoadContent()-Methode laden Sie die XNB-Dateien mit den benötigten Bildern. Diese XNB-Dateien wurden wie oben erwähnt in einem separaten Windows Phone-XNA-Projekt erstellt. In diesem Beispiel werden zwei Bilder verwendet, ein Sternenfeldbild für den Hintergrund und ein einzelnes Bild mit einer weißen Kugel. Mit MonoGame können Bilder beim Zeichnen getönt werden, daher müssen Sie keine Kugeln mit jeder möglichen Farbe erstellen.


        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            _spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here

            _backgroundTexture = Content.Load<Texture2D>("starfieldImage");
            _ball = Content.Load<Texture2D>("ballImage");

        }

Nun können Sie Ihre Objekte zeichnen. In MonoGame wird wie in XNA ein Objekt mit dem Namen SpriteBatch verwendet, um die Sprites zu rendern. Sie müssen einen SpriteBatch erstellen und dann die zugehörige Begin()- und End()-Methode aufrufen. Dazwischen werden die Sprites gezeichnet. Zudem ist es wichtig, den Bildschirm bei jedem Bild zu leeren. Daher wird in diesem Beispiel beim Zeichnen des Sternenfeldbilds der gesamte Bildschirm gefüllt.


        protected override void Draw(GameTime gameTime)
        {
            _spriteBatch.Begin();

            // Draw backgound (also clears screen)
            _spriteBatch.Draw(_backgroundTexture, GraphicsDevice.Viewport.Bounds, Color.White);

            // Draw the target balls in alternating colors
            int i = 0;
            foreach (Vector2 v in ball_locations)
            {
                switch (i)
                {
                    case 0: _spriteBatch.Draw(_ball, new Rectangle((int)v.X, (int)v.Y, 50, 50), Color.Red); break;
                    case 1: _spriteBatch.Draw(_ball, new Rectangle((int)v.X, (int)v.Y, 50, 50), Color.Green); break;
                    case 2: _spriteBatch.Draw(_ball, new Rectangle((int)v.X, (int)v.Y, 50, 50), Color.Blue); break;
                    case 3: _spriteBatch.Draw(_ball, new Rectangle((int)v.X, (int)v.Y, 50, 50), Color.Yellow); break;
                }
                i++; if (i > 3) i = 0;
            }

            // Draw player's ball
            _spriteBatch.Draw(_ball, new Rectangle((int)player.X, (int)player.Y, 50, 50), Color.White);

            _spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}

Beim Ausführen kann die App etwa wie folgt aussehen:

MonoGame-Projektvorlage

Natürlich ist immer noch eine Menge zu tun! Das Aktualisieren der Position der einzelnen Bildschirmobjekte erfolgt mit der Update()-Methode, die automatisch für jedes Bild aufgerufen wird. Die Textanzeige erfordert ebenfalls ein wenig Arbeit: Sie können ein XAML-Projekt verwenden und ein TextBlock-Steuerelement und Button-Objekte überlagern oder aber das SpriteBatch-Textrendering von MonoGame verwenden. Die Textdarstellung erfolgt mit dem SpriteBatch-Rendering schneller, doch müssen Sie ein Schriftartobjekt in einem XNA-Projekt auf dieselbe Art und Weise erstellen, wie Sie die XNB-Bilder aus PNG-Dateien erstellt haben.

Wenn Sie sich für das Erstellen von Spielen in MonoGame interessieren, finden Sie auf der Website MonoGame.net viele Lernprogramme und Hilfedateien. Das Buch Windows 8 and Windows Phone 8 Game Development von Adam Dawes ist ebenfalls ein ausgezeichneter Ratgeber.

Verwandte Themen

XNA-Spieleframework
MonoGame
Von XNA zu MonoGame (Gamasutra)
Code-Bibliotheken, Toolkits und andere Hilfequellen
Reversi, ein Windows Store-Spiel in XAML, C# und C++
Exemplarische Vorgehensweise für die Entwicklung von DirectX-Spielen und Beispiele

 

 

Anzeigen:
© 2015 Microsoft