Transcription of Spieleprogrammierung in Java - petrastumpf.de
1 Spieleprogrammierung in JavaGliederung 1. Vorwort 2. Grundlagen der Spieleprogrammierung in java java 2D a) Aktives Rendern b) Bilder und Sprites c) Animation und Timing java 3D und andere Bibliotheken Sound und Musik Benutzereingabe Netzwerk a) java NIO b) Client-Server Architektur c) Synchronisation von verteilten Systemen Threads und Performance Logging & Fehlersuche Build & Deploy 3. Stickfighter - ein Anwendungsbeispiel Motivation Spielprinzip Problembereiche und L sungsans tze Klassen, Funktionen und Architektur Fazit Stichwortverzeichnis Literaturverzeichnis Quellenverzeichnis N tzliche Links im Internet Einf hrung in java Swing Einf hrung in java 2D Einf hrung in java 3D 1.
2 Vorwort Warum Spieleprogrammierung ? Diese Frage ist einfach zu beantworten, wenn man selbst gernespielt und vielleicht auch schon ab und zu davon getr umt hat ein eigenes Spiel zu entwickeln: esmacht einfach gro en Spa ! Aber wenn man sich etwas intensiver mit dem Thema auseinandersetzt,dann wird man recht bald feststellen, da sich zum Spa auch schnell die Arbeit gesellt, denn Spielesind, auch wenn sie auf den ersten Blick oft einfach erscheinen, alles andere als einfach!Genaugenommen sind Spiele kleine Simulationen einer realen Welt und verhalten sich als solchenach einem klar definierten und abgegrenzten Logik- und Spieleprogrammierung ist daher fachlich betrachtet nicht uninteressant!
3 Sie vereint in sich nichtnur verschiedene Disziplinen wie Audio, Grafik, Animation und Logik sondern stellt denProgrammierer auch im Bereich Performance und Timing vor einige Herausforderungen. Soll einSpiel dann auch noch netzwerkf hig und ber das Internet in Echtzeit spielbar sein, mu man sichmit dem Thema Synchronisation au einandersetzen und dabei nat rlich auf die Unzuverl ssigkeitdes Internets R cksicht nehmen. Dieses ist n mlich, aufgrund st ndiger unvorhersehbarerVerz gerungen im Datentransfer, f r eine fl ssige Synchronisation nicht gerade optimal!
4 2. Grundlagen der Spieleprogrammierung in java Kann man berhaupt Spiele in java programmieren? Das ist die wichtigste Frage, die man kl renmu , bevor man mit der Entwicklung eines Spiels in java beginnt! Die Antwort dazu ist grunds tzlich ja, aber nat rlich nicht alles . java ist mittlerweile technisch weit fortgeschritten und obwohl es in manchen Bereichen noch etwashinter der Performance von C/C++ oder anderen Sprachen zur ckliegt, wird es doch langsam mehrund mehr eine ernste Alternative f r die Spieleentwicklung. Durch zahlreiche interne und externeBibliotheken und APIs kann man auch unter java mittlerweile auf Hardwarebeschleunigung durchOpenGL oder DirectX zur ckgreifen und so performance-lastige Funktionen auf diedarunterliegende Hardware auslagern.
5 Es gibt au erdem Bibliotheken, die ein direktes Ansteuernder Eingabeger te ber DirectInput unterst tzen und so ein Event-System-unabh ngiges Abfragenvon Eingabeger ten (wie Joysticks oder Gamepads) erm gibt zahlreiche Studien, die bewiesen haben, da java in der Ausf hrung von Programmcode imVergleich zu C/C++ langsamer ist. Bei manchen Funktion ben tigt java etwa 130-150% der Zeitum die gleichen Rechenoperationen durchzuf hren, w hrend es bei anderen sogar schneller ist undnur etwa 90% der Rechenzeit ben tigt. Im Durchschnitt kann man dann mit etwa 20-30% mehrRechenzeit im Vergleich zu C/C++ rechnen.
6 Diese Zahlen sind jedoch stark abh ngig von derverwendeten JVM Version und wurden mit jeder neuen Version von java immer etwas man diese Entwicklung sieht und auch noch im Hinterkopf beh lt, da bisher nur etwa 50%der Optimierungsm glichkeiten in den JVMs genutzt wurden, kann man davon ausgehen, da Javaauch in Zukunft noch stark an Performance gewinnen wird. Aber auch wenn java um vielleicht 30% langsamer als C++ ist, reicht die Leistung immer noch aus,um interessante Spiele zu erstellen, die auch aktuellen Erwartungen an die Qualit t von Grafik undSound gerecht werden k nnen.
7 Nat rlich k nnen keine Highend-Spiele erstellt werden, die durchhardwarenahe Programmierung und hardwarespezifische Optimierung jedes bischen Performancenutzen. Aber daf r ist java auch nicht gedacht! Der Vorteil bei der Verwendung von java ist einhohes Abstraktionsniveau durch Objektorientierung und die Verwendung funktionsreicher und intelligenter APIs, um so eine erh hte Produktivit t und Wiederverwendbarkeit zu erziehlen. java 2 DJava bietet mit Java2D ein m chtiges und flexibles Framework f r die Darstellung von ger te- undaufl sungsunabh ngiger 2D Grafik.
8 Es ist eine Erweiterung des Abstract Windowing Toolkits(AWT) und stellt eine Sammlung von Klassen, f r die Arbeit mit geometrischen Formen, Text undRasterbildern, zur Verf gung. Als Bestandteil der java Foundation Classes (JFC) ist Java2 Dautomatisch in jeder aktuellen JVM mit java Swing bietet Java2D alle Grundlagen f r die Darstellung und Verarbeitung vonGrafik. Eine Einf hrung zu java Swing und Java2D befindet sich im generelle, vielseitige und m chtige API zur Darstellung von Grafik und GUI sind java Swingund Java2D nat rlich nicht auf Spiele optimiert und deshalb weniger performant als anderespezialisierte Bibliotheken.
9 Seit der java Version sind jedoch zahlreiche Grafikfunktionen vonJava Swing und Java2D hardwarebeschleunigt und somit gut f r die Spieleprogrammierungeinsetzbar. Insbesondere das Zeichnen von Lienen und das F llen von Rechtecken, sowie dasZeichnen / Kopieren von Bildern sind optimiert. 1-Bit Transparenz von Bildern (also komplettdurchsichtige Bereiche) ist ebenfalls hardwarebeschleunigt, w hrend teilweise Transparenz reinsoftwarebasiert berechnet java Version soll die Hardwarebeschleunigung noch weiter ausgebaut werden. Da es aber zuBeginn unserer Arbeit noch keine (stabile) Version von java gab, k nnen wir dar ber auch nochkeine Angaben machen.
10 F r unsere Arbeit haben wir java verwendet und alle Aussagensind daher auf dieser Version von java basiert. a) Aktives RendernWill man eine Anwendung schreiben, die den Bildschirminhalt h ufig ver ndert und neuzeichnet,dann wird man fr her oder sp ter zwangsl ufig an die Grenzen des Event-Handling-Systems sto AWT / Swing wird n mlich ein Neuzeichnen von Fenstern und Komponenten ber die Methoderepaint() angefordert. Diese Methode gibt dann die Anforderung in Form eines Repaint-Events anden Main-Thread des GUI-Toolkits weiter.