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

Post on 05-Apr-2015

105 views 1 download

Transcript of 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

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!

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

Tests

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

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

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

Texture FontsSelbst so eine Bitmap Font zu erstellen und

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

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

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

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

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

XNA TetrisGucken wir uns mal das Rendern des

Hintergrunds im Detail mit dem folgenden Unit Test an:

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

Und den Code zum Rendern:

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

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!

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

XNA TetrisErstmal ein bisschen Tetris spielen und

relaxenErweiterungsideen: Neues Grafikset, neue

Blocks, …

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