Freigeben über


Dieser Artikel wurde maschinell übersetzt.

Schritte erstellt

In der Schlüssel der Zune spielen

Mike Calligaro

Inhalt

Man, C scharf ist.
Anatomie ein Spiel
Sprites auf Pixie Staub
Namen der Anlage und Farbe verwenden
Ya notwendige zu spielen verschieben.
Sprite in einem Feld
Bing Bang Boom
Erweiterte Zeichnung
Der Rest wird von an Sie

Meine Sohn, da er drei, war Xbox wiedergegeben wurde wurde gestartet mit ein Interesse bei der Programmierung, Spiele speziell zu schreiben. Diese aufgefordert mich herunterladen von XNA Game Studio und Tabellen in diese selbst, Sie kennen, sodass ich ihn beibringen konnte. Immer ich meinen eigenen Spiele schreiben wollte habe mussten aber nichts mit dem Sie zu tun. Wirklich.

XNA Game Studio 3.0 hinzugefügt, die Möglichkeit zum Schreiben von Spielen für Zune, d. h. die Zune jetzt eine mobile Entwicklungsplattform handelt. Damit Sie ausgeglichene, er steht, Gamecontroller für einen Artikel Schritte erstellt. Wenn Sie bereits ein XNA-Entwickler sind, kann es einige Konzepte überprüfen werden wenn, die Sie bereits kennen. Aber wenn Sie wie mich Programmierer, die über enthusiastic jedoch relativ neu Spiel Entwicklung lesen.

Man, C scharf ist.

Der Großteil der Karriere 15 Jahr bei Microsoft habe ich ein Entwickler Systeme und Treiber tätig. Sprache der Auswahl und notwendig ist ein ziemlich bis Gräten C++ wurde. Ich erhalte nur selten mit runtimes wie MFC- und Microsoft .NET Framework. Bis vor kurzem konnte nicht ich selbst STL viel weniger erstellte Verwendung Sie geschrieben haben.

Dies ist der Tag-Auftrag. Aber in der inaktiven Zeit ich Liebe Wiedergabe um mit C#. Größtenteils schreiben es kaum Anwendungen für mein Windows Mobile-Geräte und gelegentlich für meinen PC. C++ behandeln nicht mir als fehlerhaft wie viele Entwickler systemeigener, jedoch noch ich etwas giddy erhalten, wenn ich in C# schreiben. Sie erhalten eine Menge mit sehr wenigen Codezeilen ausgeführt. C#-ich swear, ist so viel Spaß, die Sie eine controlled Inhalt verborgen ist machen sollten.

In den Spaß Kategorie, XNA Game Studio ist wie C# auf steroids. Das team über Es wurde eine erstaunliche neue Auftrag Spiel Entwicklung leicht machen durchgeführt. Das framework ist einfach, die Festplatte Inhalte ist größtenteils für Sie verarbeitet und Sie haben eine unzählige Varianten Beispiele sollen an der Sie die verschiedenen Aspekte der Spiel Entwicklung beibringen freigegeben.

Beginnen Sie mit der creators.xna.com. Von dort können Sie die kostenlose XNA Game Studio 3.0 herunterladen. Wenn Sie bereits eines der verschiedenen incarnations von Visual Studio 2008 verwenden, werden XNA Game Studio in es integriert werden. Wenn Sie Visual Studio 2008 besitzen, nicht Problem. XNA Game Studio funktioniert auch mit der kostenlosen Visual C# Express Edition. (Mit anderen Worten, obwohl ich Visual Studio erwähnt, können Sie Visual C# Express Edition ersetzen Wenn, was Sie verwenden.)

Die creators.xna.com-Website ist auch voll von gute Informationen für das. Klicken Sie auf den Ausbildung link am oberen Rand der Seite des Anfänger Führungslinien, Beispiele, finden und - der. Der "des Anfänger Guide auf 2D-Spiele" enthält besonders gut, wie in die Dokumentation, die mit XNA Game Studio installiert wird. In einigen Fällen verfügt über in die Dokumentation installation Informationen, die sich nicht auf im Internet befindet. In Visual studio, Sie erhalten in dieser Dokumentation, indem auswählen-Hilfe | Inhalt und den filter auf XNA Game Studio 3.0.

XNA Game Studio können Sie einen Code Basis und Xbox PC und Zune bereitstellen. Alles, was ich hier auf allen drei Plattformen funktionieren wird. Die kostenlose downloads sind, müssen Sie für den PC oder Zune entwickeln, Xbox-Entwicklung erfordert jedoch eine Premium-Mitgliedschaft, die eine jährliche Gebühr Kosten.

Anatomie ein Spiel

Nach Sie XNA Game Studio 3.0 installiert haben, Sie können erstellen ein „ Hello World Spiels für Zune, indem Sie Datei | Neu | Projekt. Wählen Sie die Visual C#-| XNA Game Studio 3.0, und klicken Sie auf Zune Spiel (3.0). Während die Anwendung, die dies erzeugt, tatsächlich Hello World sagen nicht, es ansehen, für die Eingabe, zeichnen den Hintergrund Blau und bei Bedarf beenden.

Wenn Sie etwas wirklich kompliziert erwarten, können Sie in für eine pleasant Überraschung ein. Die gesamte Spiel Infrastruktur Beträge ungefähr 20 Zeilen des Codes verteilt über sechs Funktionen. Hier ist eine Beschreibung für diese Funktionen.

Der Konstruktor ist einfach ein standard, Garten verschiedene C#-Objekt Konstruktor. Behandeln Sie dem wie einem anderen.

Die Initialisierung wird nach Abschluss der der Konstruktor aufgerufen. Sie führen können weitere Initialisierung, insbesondere für Dinge, die für das system Grafiken.

LoadContent nach der Initialisierung aufgerufen, und ist, in dem Sie Ihre Bilder und sounds laden.

UnloadContent heißt beim Spiel beenden, und Sie können Sie Ihren Inhalt zu entfernen. Jedoch, da die Entladen von den meisten Bilder und sounds zur behandelt werden, in der Regel nicht müssen Sie hier nichts.

Update ist wahrscheinlich der Stelle in Spiel Entwicklung die von der normalen Anwendung Entwicklung abweicht. Anstatt eine Nachrichtenschleife Spiele regelmäßig Ihre Eingabe abzufragen, berechnen, welche Aktionen für ihn, und ziehen dann das Ergebnis dieser Berechnungen. Die meisten, geschieht, in der Aktualisierung, sodass dies ist, in dem meisten Ihr code live werden.

Zeichnen heißt nach jedes Update, und es ist, in dem Sie Bilder zeichnen.

Diese Antwort ist richtig. Obwohl die Anwendung sehr kurz ist, es beginnt, zeichnet den Bildschirm blauen liest die Eingabe und beendet, wenn Sie die Schaltfläche „ zurück. Was ist, werden? Fanden Sie Spiel Entwicklung Festplatte wäre? Nicht mit XNA Game Studio.

Sprites auf Pixie Staub

Das war einfach, jedoch Blauer Hintergrund, der beendet wird nicht für eine überzeugende Spiel vornehmen. Sie benötigen es sich um tatsächlichen Bilder, wenn Sie ein Spiel haben das sind. Zum Glück nicht das Einfügen von Bildern auf dem Bildschirm nur schwer.

In einer minute ich werde Sie den code anzeigen, aber zunächst müssen, ein Bild in Ihrem Projekt zu laden. In Visual Studio, sollte Sie ein Fenster aufgerufen Projektmappen-Explorer ist (falls nicht, Sie können finden Sie im Menü Ansicht). Klicken Sie mit der rechten im Projektmappen-Explorer, Maustaste auf Inhalt, und wählen hinzufügen | vorhandenes Element. Hier können Sie Sie auf alle BMP, JPG, PNG, .tga oder .DDS image-Datei zeigen.

Angenommen, Sie haben ein Bild einer person player.jpg und, dass Sie nur Sie Inhalt hinzugefügt. Abbildung 1 zeigt den code dieses Abbild auf dem Bildschirm angezeigt.

Abbildung 1 ein Bild anzeigen

// Add these member variables
Texture2D texture;
Vector2 position;

// Add this line to the constructor
position = new Vector2(100, 100);

// Add this line to LoadContent()
texture = Content.Load<Texture2D>("player");

// And add these lines to Draw();
spriteBatch.Begin();
spriteBatch.Draw(texture, position, Color.White);
// (Draw the rest of your sprites)
spriteBatch.End();

Bevor ich diese Zeilen erklären, müssen wir lingo sprechen. XNA Game Studio gestartet als ein Entwicklungssystem für die Xbox. Daher ist es alle 3D-Grafiken basieren auf. 2D-Spiele (und da die Zune ein 3D renderer nicht, müssen Sie 2D-Spielen) sind wirklich 3D-Spiele wobei alles, was eigentlich thin. So sehen Sie 3D Begriffe, um den code sprinkled. Z. B. sprite während der normalen Begriff für ein Bild in einem 2D-Spiel kommt das Wort Muster von 3D spielen. Wie weit, wie XNA Game Studio dient ist, sind sprites wirklich thin 3D Rechtecke mit Strukturen, die Sie zugeordnet an.

Die Funktion Content.Load hat eine Anlage-Name, dem in der Standardeinstellung den Dateinamen ohne die Erweiterung handelt. Da ich ein Abbild, genannt player.jpg geladen, übergeben es die Zeichenfolge "Spieler" an Content.Load. In der LoadContent-Funktion werden Sie feststellen, ist bereits eine Linie, die eine SpriteBatch zuweist. Alle Zeichnung wird mit diesem SpriteBatch durchgeführt. In der Zeichnen-Funktion teilen Sie die SpriteBatch Sie sind im Begriff, beginnen, zeichnen die sprites und informieren Sie Sie abgeschlossen haben.

Die position Membervariablen ist Vektor-Struktur, die die x enthält und y Speicherort das sprite, die beansprucht werden. Im Beispiel verwendet es pixel Speicherort (100, 100). Die Farbe ist ein Farbton, den Sie die sprites hinzufügen können. Verwenden weiß lässt das Bild unverändert.

Daher mussten um ein Bild auf dem Bildschirm zu erhalten, Sie nur die Struktur laden und teilen Sie die Stapelverarbeitung sprite um es zu zeichnen. Das erste Bild wird im Grunde genommen vier Codezeilen und jeweils nachfolgenden nimmt zwei mehr.

Namen der Anlage und Farbe verwenden

Hoffentlich, zu diesem Zeitpunkt Sie betrachten das player-Abbild auf dem Bildschirm und denken, dass diese nicht so schwierig ist. Aber vielleicht Sie sind nicht vollständig zufrieden. Was geschieht, wenn jetzt keine Sie, dass der code muss den Dateinamen des Bildes verwenden? Und Was passiert, wenn die Grafik, die Sie geladen rechteckig ist, aber der Spieler wichtiger ist, ist nicht? Wie können Sie nur die Spieler und nicht auf den Hintergrund zeichnen?

Um beide der folgenden Fragen beantworten, müssen Sie die Eigenschaften für das Bild ansehen, die Sie geladen. Zur Projektmappen-Explorer zurückzukehren, und klicken Sie mit der rechten Maustaste auf die Datei (in meinem Beispiel player.jpg). Wählen Sie Eigenschaften aus. Einen Eigenschaftenbereich wird unterhalb der Projektmappen-Explorer bietet viele nützliche Informationen angezeigt. Betrachten Sie zunächst Name der Anlage. Dies ist der name, die an Content.Load übergeben. Wenn ändern Sie Sie möchten es etwas anderes als den Dateinamen zu machen, hier.

Jetzt erweitern Sie Inhalt-Prozessor, indem Sie die wenig +, um die links neben dem Namen. Die Sie sich hier kümmern-Eigenschaft ist die Farbe Schlüssel Farbe. Alle pixel, deren Farbe die Hintergrundfarbe entspricht, wird transparent sein. Das ist, wie Sie ein rechteckiges Bild und entfernen, den Hintergrund. Zu der sprite des Hintergrund, entweder ändern Sie seine Farbe oder ändern Sie die Farbe wichtige Einstellung so, dass Sie übereinstimmen. Die Voreinstellung entspricht auf Rot, Grün, Blau und Alpha Werte über 255 0, 255, 255, also daraufhin in Magenta angezeigt.

Ya notwendige zu spielen verschieben.

Sicherlich beziehen einer einzelnen sprite auf blauem Hintergrund ist nicht als Nächstes groß in Spiele werden. Minimal, benötigen Sie der Benutzer dieses sprite irgendeine Weise verschieben können. Und, dazu, Sie müssen wissen, was der Benutzer tun möchte. Wenn Sie auf die Funktion Aktualisieren in Ihrer Anwendung gesucht haben, haben Sie wahrscheinlich bereits eine Vorstellung dazu. Der Vorgabecode liest die Eingabe und beendet wird, wird die zurück-Taste gedrückt. Leider monopolized diese Art von die Eingabe vorhanden. Wir ändern, Elemente ein bit mit der Sie die Eingabe auch verwenden können.

Hier sehen Sie derzeit sehen:

if (GamePad.GetState(PlayerIndex.One).Buttons.Back == 
    ButtonState.Pressed)
    this.Exit();

Ich vorschlagen folgendermaßen ändern:

GamePadState input = 
    GamePad.GetState(PlayerIndex.One);
if (input.Buttons.Back == ButtonState.Pressed)
    this.Exit();

Jetzt können die Eingabe-variable Sie Benutzereingaben betrachten. Beachten Sie, dass Eingabe ein GamePadState ist. Betrachten Sie die Zune des Eingabe als eine Xbox-gamepad, das einige der Schaltflächen fehlt. Abbildung 2 zeigt die vollständige Liste der Zuordnungen für die Zune der Schaltflächen.

Abbildung 2 Zune Schaltfläche Zuordnungen
Schaltfläche Zuordnung
Sichern GamePadState.Buttons.Back
Wiedergabe/Pause GamePadState.Buttons.B
DPad-Mitte GamePadState.Buttons.A
DPad-Kanten GamePadState.DPad
Klicken Sie auf die ZunePad eine gleitende GamePadState.Thumbsticks.Left
Klicken auf die ZunePad GamePadState.Buttons.LeftShoulder

Okay, also stellen des Players zu verschieben. Der code in Abbildung 3 werden sowohl für DPad ZunePad Eingabe behandelt, damit er auf eine beliebige Zune funktioniert. (Die ursprünglichen Zunes hat nicht die Funktion ZunePad verfügen.)

Abbildung 3 Unterstützung von Lagerplatz

// add these lines to Update()
const int c_speedScalar = 100;
Vector2 speed = Vector2.Zero;

speed.X = input.ThumbSticks.Left.X * c_speedScalar;
speed.Y = input.ThumbSticks.Left.Y * c_speedScalar * -1;

if (input.DPad.Left == ButtonState.Pressed)
    speed.X -= c_speedScalar;
else if (input.DPad.Right == ButtonState.Pressed)
    speed.Y += c_speedScalar;

if (input.DPad.Up == ButtonState.Pressed)
    speed.Y -= c_speedScalar;
else if (input.DPad.Down == ButtonState.Pressed)
    speed.Y += c_speedScalar;

position += speed * (float)gameTime.ElapsedGameTime.TotalSeconds;

Beachten Sie, dass die zeichnen-routine der Spieler am durch die position member-variable angegebenen Speicherort zeichnen. Daher ist es, das sprite verschieben, müssen Sie diesen Speicherort zu aktualisieren.

Der tatsächlich attraktive Teil ist es sich um die letzte Zeile, in dem Sie die position ändern. Die Xbox besitzt die stärkere Grafikfunktionen als die Zune, daher die Update-routine häufiger aufgerufen wird. Anders ausgedrückt, hat eine höhere framerate. Dies bedeutet, Sie verschieben, die unabhängig von der framerate vornehmen müssen. Um dies zu erreichen, verwenden Sie die Eingabe, um eine Geschwindigkeit, nicht auf eine position zu berechnen. Konvertieren Sie anschließend die Geschwindigkeit in einer position durch Multiplizieren mit der Zeit, die seit dem letzten Aufruf zu Update bestanden hat.

Sprite in einem Feld

Jeder Benutzer kann verschieben. Der Trick dabei ist wann beenden wissen.

Wenn das Spiel interessant sein, müssen Sie wissen, führt zu einem Konflikt bei ein sprite mit einem anderen Layoutnamen. Der attraktive Spiel Entwickler Begriff für diesen ist Konflikte erkennen und die einfachste Möglichkeit dazu Konflikte Erkennung in XNA Game Studio ist, ein Objekt eine BoundingBox aufgerufen zu verwenden. Im Grunde Sie Ihre Objekte nicht sichtbaren Felder Publikationstext und um anzuzeigen, wenn keines dieser Felder miteinander überschneiden überprüfen.

Abgesehen aus das aktuelle Spiel wird weniger als interessant ist das größte problem, das sprite aus dem Bildschirm bewegen kann. Wir korrigieren. Sobald das sprite um einen Rand drückt, werden wir Sie die Position (100, 100) wechseln stellen.

Zunächst müssen Sie ein Rahmenfeld für den Bildschirm:

// Add this member variable
BoundingBox bbScreen;

// Add these lines to Initialize() 
Vector3 min = new Vector3(0, 0, 0);
Vector3 max = new Vector3(graphics.GraphicsDevice.Viewport.Width,
    graphics.GraphicsDevice.Viewport.Height, 0);
bbScreen = new BoundingBox(min, max);

Es gibt etwas magic Hier, aber es ist nicht sehr kompliziert magic. Das framework Hello World haben Sie eine Membervariablen Grafiken, die die Breite und Höhe des Spiels Bildschirms bezeichnet. Der oberen linken Ecke des umgebenden Felds von der linken oberen Ecke des Bildschirms und der unteren rechten Ecke der umgebenden Felds zur der unteren rechten Ecke des Bildschirms lassen. BoundingBoxes erfordern eine 3D Vektoren, also die z-Koordinaten auf 0 festgelegt.

Nun wollen wir erstellt ein Feld für das sprite, wie folgt:

// Add these lines to Update() after 
// the position has been calculated.
Vector3 min = 
    new Vector3((int)position.X, (int)position.Y, 0);
Vector3 max = 
    new Vector3((int)position.X + texture.Width - 1,
    (int)position.Y + texture.Height - 1, 0);
BoundingBox bb = new BoundingBox(min, max);

Schließlich betrachten ob das sprite vollständig auf dem Bildschirm enthalten ist. Ist dies nicht der Fall, Sie haben muss einen Rand drücken. Fügen Sie diese Zeilen direkt unter denen zuvor hinzugefügt:

ContainmentType ct = bbScreen.Contains(bb);
if (ct != ContainmentType.Contains)
    position = new Vector2(100, 100);

Nachdem das sprite zurück zu wechseln, wird (100, 100) bei jedem Treffer den Rand des Bildschirms. Sie sollten natürlich wahrscheinlich tun etwas mehr intelligent, wie beenden oder warp auf die andere Seite.

Colliding am Rand des Bildschirms unterscheidet ein wenig colliding mit einem anderen Objekt. Die normale situation ist, dass Sie in dem Bildschirm sind, aber Sie außerhalb der anderen Objekte sind. Daher ein Konflikt am Rand des Bildschirms überprüfen, möchten Sie, ob dem Bildschirm Feld Sie enthält. Doch wenn Sie ein Konflikt mit einem anderen Objekt überprüfen möchten, Sie möchten anzeigen, wenn dieses Objekt-Feld mit überschneidet. Das BoundingBox-Objekt verfügt zu diesem Zweck eine Intersects-Memberfunktion sind. Überschneidet gibt eine boolesch, der true ist, wenn die beiden Felder überschneiden. Verwenden Sie Intersects, wenn Sie überprüfen, ob zwei sprites miteinander treffen möchten.

Bing Bang Boom

Sie sind jetzt eine Technologie von schreiben Ihre eigenen Spiele. Sie können Bilder zeichnen, verschieben Reaktion auf Benutzereingaben und handeln Sie Ausführen in jedes andere. Da es sich um ein Spiel handelt, möchten Sie wahrscheinlich ein Konflikt sprite um eine riesige Auflösung zu beenden. Sie wissen bereits, wie die Auflösung zu zeichnen, jedoch es keine wirklich satisfying, wenn Sie den player-Lautsprecher zu rattle. Glücklicherweise ist das Wiedergeben von sounds noch einfacher als sprites zeichnen.

Zunächst müssen Sie einen sound zu Ihrem Projekt hinzufügen. Der Prozess hier ist ähnlich wie ein Bild hinzufügen. Wechseln um im Projektmappen-Explorer, klicken Sie mit der rechten Maustaste auf den Inhalt, und wählen Sie Hinzufügen | vorhandenes Element. Von dort können Sie eine WAV, WMA, MP3 oder .xap-Datei auswählen. Darüber hinaus wie der image-Datei können gegebenenfalls einen anderen Anlage Namen als den Dateinamen Sie es in den Eigenschaften ändern.

Nun wollen wir diesen sound wiedergeben. Dieser code wird davon ausgegangen, dass es sich bei die Datei, die Sie geladen um explode.wav wurde:

// Add this member variable
SoundEffect sndBoom;

// Add these lines to LoadContent()
ContentManager contentManager = 
    new ContentManager(Services, "Content");
sndBoom = 
    contentManager.Load<SoundEffect>("explode");

// Add these lines to Update()
if (input.Buttons.B == ButtonState.Pressed)
    sndBoom.Play();

Der contentManager.Load-Aufruf ist vergleichbar mit der Funktion, die Sie, verwendet um Ihre des sprite Textur zu laden. Dann wie Sie sehen, wenn Sie den sound, hören möchten. spielen Sie nur Sie. Beachten Sie, wie geschrieben, diesen code versucht, einen neuen sound jeden frame wiedergeben, während die B-TASTE gedrückt ist. Je die Länge der der sound kann dies zu viele Kopien der Sie die Wiedergabe und das Spiel eine Ausnahme führen. Sie sollten vor, schützen, durch nur einmal pro drücken Sie die Schaltfläche Wiedergeben. Die klassische dazu besteht Speichern von den vorherigen Zustand des die Eingabe und dienen nur, wenn der Status ändert.

Erweiterte Zeichnung

Sie nun habe die grundlegenden tools, die Sie Ihre eigenen Spiele erstellen müssen. Ich vorschlagen Sie dauern einige Spielen mit diesen tools und erhalten mit Ihnen vertraut. Wenn Sie weitere möchten, können Sie eine kurze Einführung erweiterter Ideen in diesem Abschnitt lesen. Die Hilfe-Dokumente für diese Funktionen erhalten alles Sie Sie wissen, deren Verwendung müssen.

Erstens wir erklären Sie die Z-Reihenfolge. Wie der code derzeit, steht Wenn zwei sprites überlappen, wird die gezeichnet, die zuletzt im Vordergrund landen. Dies ist eine Art von einem Schmerz. Eine viel bessere Methode liegt darin, dass jedes sprite eine variable, die die Reihenfolge angibt, in der Sie gezeichnet werden sollte. Zu diesem Zweck müssen Sie kompliziertere Versionen von spriteBatch.Begin und spriteBatch.Draw, zu verwenden wie folgt:

spriteBatch.Begin(
    SpriteBlendMode.AlphaBlend, 
    SpriteSortMode.BackToFront, 
    SaveStateMode.None);
spriteBatch.Draw(texture, position, 
    null, Color.White, 0, Vector2.Zero, 
    1.0F, SpriteEffects.None, zOrder);

Verbringen Sie einige Zeit mit der SpriteBatch-Dokumentation und experimentieren. Diese Funktionen sind etwas kompliziert, aber Sie sind außerdem sehr leistungsstark. Beispielsweise, wenn Sie die Größe der der sprites ändern möchten, können Sie ein Rechteck anstelle ein Vektor für die position verwenden. Wenn die Grenzen Rechteck als die Struktur unterschiedlich sind, wird XNA Game Studio Sie für Sie automatisch skaliert. Wenn die Struktur mehrere Bilder, denen hat zwischen wechseln möchten, können Sie in einem Quell-Rechteck übergeben, die angibt, welcher Teil der Textur zum Zeichnen.

Ändern Sie den alpha Wert der Farbe, die Sie, übergeben um zu zeichnen, Sie ggf. ein durchsichtiges sprite:

Color trans = new Color(
    Color.White.R, Color.White.G, 
    Color.White.B, 128);

Durchlauf übertrgn zeichnen anstelle des Color.White, und das sprite wäre Teil durchsichtiges.

Hier ist schließlich einige elegante code, die mit dem Bildschirm von Hochformat Querformat drehen:

// Add this member variable
Matrix matTransform;

// Add these lines to the constructor
matTransform = Matrix.Identity;
matTransform *= 
    Matrix.CreateRotationZ(MathHelper.ToRadians(90));
matTransform *= 
    Matrix.CreateTranslation(240, 0, 0);

// In Draw() change spriteBatch.Begin to this
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, 
    SpriteSortMode.BackToFront, SaveStateMode.None, 
    matTransform);

Der Rest wird von an Sie

Der vollständige code für mein Beispiel wird angezeigt, in Abbildung 4 , und Sie sollten erhalten Sie die verschieben. Wenn Sie aground ausführen, ist der creators.xna.com-Website zahlreiche Beispiele, die Sie wie alle möglichen arcane Spiel Entwicklung a. in pro-pixel umgebenden Feldern auf Physik Modelle anzeigen.

Abbildung 4 A Simple Zune Spiel

public class Game1 : Microsoft.Xna.Framework.Game {
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    Matrix matTransform;
    Texture2D texture;
    SoundEffect sndBoom;
    BoundingBox bbScreen;
    Vector2 position;

    public Game1() {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
        position = new Vector2(100, 100);
        matTransform = Matrix.Identity;
        // Uncomment these lines to do Landscape Mode
        //matTransform *= Matrix.CreateRotationZ(          MathHelper. ToRadians(90));
        //matTransform *= Matrix.CreateTranslation(240, 0, 0);
    }

    protected override void Initialize() {
        Vector3 min = new Vector3(0, 0, 0);
        Vector3 max = 
            new Vector3(
            graphics.GraphicsDevice.Viewport.Width, 
            graphics.GraphicsDevice.Viewport.Height, 0);
        bbScreen = new BoundingBox(min, max);
        base.Initialize();
    }

    protected override void LoadContent() {
        spriteBatch = new SpriteBatch(GraphicsDevice);
        texture = Content.Load<Texture2D>("player");
        ContentManager contentManager = 
            new ContentManager(Services, @"Content\Audio");
        sndBoom = contentManager.Load<SoundEffect>("explode");
    }

    protected override void UnloadContent() {
    }

    protected override void Update(GameTime gameTime) {
        GamePadState input = GamePad.GetState(PlayerIndex.One);
        if (input.Buttons.Back == ButtonState.Pressed)
            this.Exit();

        if (input.Buttons.B == ButtonState.Pressed)
            sndBoom.Play();

        const int c_speedScalar = 100;
        Vector2 speed = Vector2.Zero;

        speed.X = input.ThumbSticks.Left.X * c_speedScalar;
        speed.Y = input.ThumbSticks.Left.Y * c_speedScalar * -1;

        if (input.DPad.Left == ButtonState.Pressed)
            speed.X -= c_speedScalar;
        else if (input.DPad.Right == ButtonState.Pressed)
            speed.X += c_speedScalar;

        if (input.DPad.Up == ButtonState.Pressed)
            speed.Y -= c_speedScalar;
        else if (input.DPad.Down == ButtonState.Pressed)
            speed.Y += c_speedScalar;

        position += speed * (float)gameTime.ElapsedGameTime.TotalSeconds;

        Vector3 min = new Vector3((int)position.X, (int)position.Y, 0);
        Vector3 max = new Vector3((int)position.X + 
            texture.Width - 1, (int)position.Y + texture.Height - 1, 0);
        BoundingBox bb = new BoundingBox(min, max);

        ContainmentType ct = bbScreen.Contains(bb);
        if (ct != ContainmentType.Contains)
            position = new Vector2(100, 100);

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime) {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin(SpriteBlendMode.AlphaBlend, 
            SpriteSortMode.BackToFront, SaveStateMode.None, matTransform);
        spriteBatch.Draw(texture, position, null, Color.White, 
            0, Vector2.Zero, 1.0F, SpriteEffects.None, 0.5F);
        spriteBatch.End();

        base.Draw(gameTime);
    }
}

Ich hoffe, Sie XNA game Entwicklung in C# zu wie viel Spaß, wie ich finden. Vielleicht wird etwas Sie als Nächstes groß in Spiele werden... Wenn der Sohn Sie zu beat nicht. Herzlichen Glückwunsch zum Codieren.

Senden Sie Fragen und Kommentaregoplaces@Microsoft.com.

Michael-Calligaro ist ein Senior Development Lead mit dem Windows Mobile-team bei Microsoft sowie einem Mitwirkenden in der team-blog von Windows Mobile, die Sie am sehen könnenblogs.msdn.com/WindowsMobile.