Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

18
Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke http://abi.exdream.com

Transcript of Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Page 1: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Auszug aus dem Buch am Beispiel von XNATetris

By Benjamin Nitschkehttp://abi.exdream.com

Page 2: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

XNA TetrisWiederbenutzbare Game Components

Texture Fonts mit Bitmaps

Wie erkennen wir Input/Steuerung in XNA

Wie spielen wir Sound in XNA ab

Am Beispiel von XNA Tetris sieht man wie das alles geht!

Page 3: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Wiederbenutzbare Game Components Trennung zwischen Basis-Klasse, Tetris Spiel und

Tests

Page 4: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Wiederbenutzbare Game Components Beispiele für Game Components

Frame CounterScreenshot GrabberTeile eines Spiels (siehe rechts)Oder sogar Teile einer Render-

Engine um z.B. 3D landscapes darzustellen

Aber wir schreiben nicht alles als Game Components, oft ist es besser einfach Code zu schreiben

Page 5: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Wiederbenutzbare Game Components GameComponent hat Initialize und Update

MethodenKann benutzt werden für Updates und SpiellogikOder um Input Daten zu handelnOder wenn Du das Rendern selbst machen willst

DrawableGameComponent hat eine Draw MethodLeichter zu benutzen, wenn man was rendern willGut für 2D Grafik, Draw wird automatisch aufgerufenAber kann auch zum falschen Zeitpunkt rendern

Page 6: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Texture FontsFonts waren nicht supported in XNA 1.0 (Update:

Seit XNA 1.0 Refresh von April 2007 gibt es nun eine neue TextureFont Klasse, aber vielleicht will man immer noch wissen wie es funktioniert)

Wenn man nur 2-3 Texte im Spiel hat reicht oft eine einfache Texture mit vorgerenderter Grafik aus

Wenn man vollen Text-Support will, muss man über Bitmaps selbst Buchstaben stückchenweise rendern

Page 7: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Texture FontsSelbst so eine Bitmap Font zu erstellen und

auszuschneiden ist nicht einfach, am besten ein Tool benutzen oder vorhandene Fonts benutzen.

Page 8: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Texture FontsUm Text zu schreiben die WriteText(x,

y, message) Methode benutzen

Um rauszufinden wieviel Platz auf dem Bildschirm durch ein Text benoetigt werden GetTextWidth(message) benutzen

Und um letzendlich alle font Texte auf den Bildschirm zu bringen die WriteAll() Methode zu benutzen

Page 9: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Handling InputFing alles mal ganze einfach an

Nun gibts wirklich viele Properties, aber nach wie vor sehr nützlich

Viele sinnvolle Extra-Funktionen

Damit es funktioniert einfach nur jeden Frame Update aufrufen

Page 10: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Handling SoundJedes Spiel brauch seine eigene Sound-Klasse

weil die Sounds nunmal immer anders sindBenutz ein Unit-Test um alle Sounds zu testenXNA Tetris benutzt folgende Soundeffekte:

BlockMove wenn man ein Block bewegtBlockRotate wenn man ein Block rotiertBlockFalldown wenn ein Block den Boden

erreichtLineKill kommt jedes mal, wenn eine Linie

komplett wirdFight beginnt das SpielUnd Victory und Lose kommen am Spiel-Ende

Page 11: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

XNA TetrisSo, genug Theorie, es wird Zeit für XNA Tetris

Tetris stammt ursprünglich vonAlexey Pajitnov aus Russland

Wir benutzen im Spiel paareinfache Grafiken für:den HintergrundSpielelementeUnd die Tetris-Blocks

Page 12: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

XNA TetrisGucken wir uns mal das Rendern des

Hintergrunds im Detail mit dem folgenden Unit Test an:

Page 13: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Als naechstes brauchen wir das Tetris-Spielfeld. Wir wollen ein Spielfeld von 12x20 blocks:

Und den Code zum Rendern:

Page 14: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Die verschiedenen Block-Typen in XNA Tetris:O: Der blockigste von allenT: Mr. TI: Tetris!J: Gespiegeltes LL: Das Gegenteil von J ^^S und Z sind die Zig-Zags

Page 15: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Gravitation wird von der Update Methode jede Sekunde (und schneller) verwaltet

Letzendlich überprüfen wir jeden Frame ob der aktuelle Block noch weiter nach unten beweget werden kann (oder in die Richtung vom Input)

Wenn das nicht klappt wird der Block fixiert und ein neuer Block wird oben erstellt und das Spiel geht von vorne los. Jedesmal, wenn ein Block den Boden berührt müssen wir gucken ob eine Linie voll wurde!

Page 16: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

Damit das ganze Spass macht, muss man natürlich noch ein bisschen Fine-Tuning betreiben und z.b. die Schwierigkeit, Punkte, Levels, Geschwindigkeit, Steuerung, etc. anpassen.

Aber schon nach einigen Unit-Tests kann man mit den Grundprinzipien rumspielen und überlegen wie man das Spiel erweitern kann

TestRotatingBlock und TestFallingBlockAndKillLine sind die 2 wichtigsten Unit Tests dafür

Page 17: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

XNA TetrisErstmal ein bisschen Tetris spielen und

relaxenErweiterungsideen: Neues Grafikset, neue

Blocks, …

Page 18: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .

XNA Tetris

Vielen Dank fürs Zuschauen

Mein Blog: http://abi.exdream.com

Mein Buch: Professional XNA Game Development

Coding4Fun.de: http://www.Coding4Fun.de