Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .
-
Upload
marko-nachtigal -
Category
Documents
-
view
105 -
download
1
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/1.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/2.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/3.jpg)
Wiederbenutzbare Game Components Trennung zwischen Basis-Klasse, Tetris Spiel und
Tests
![Page 4: Auszug aus dem Buch am Beispiel von XNATetris By Benjamin Nitschke .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/4.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/5.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/6.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/7.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/8.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/9.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/10.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/11.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/12.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/13.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/14.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/15.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/16.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/17.jpg)
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 .](https://reader038.fdocument.pub/reader038/viewer/2022103112/55204d6249795902118b724e/html5/thumbnails/18.jpg)
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