Programmierung von Videospielen PDF

Title Programmierung von Videospielen
Author Adolph Weber
Course Softwareentwicklung
Institution Hochschule Fresenius
Pages 155
File Size 4.9 MB
File Type PDF
Total Downloads 101
Total Views 117

Summary

Die Notizen in den Klassen: Softwareentwicklung, werden vorgestellt und in interessanteren Themen zusammengefasst....


Description

HOCHSCHULE FRESENIUS INTERNATIONAL PHARMAC-OECONOMICS GESUNDHEITSÖKONOMIE UND MARKTSTRATEGIEN FÜR GESUNDHEITSPRODUKTE

SOFTWAREENTWICKLUNG ANMERKUNGEN SCHÜLER: Adolph Weber

GRUPPE: 135AG

PROFESSOR: Ulrich Jukkal

Einführung in die Entwicklung von Computerspielen Wir werden dieses Semester Hausaufgaben in Java machen. Sie müssen Java sehr schnell lernen, wenn Sie es nicht wissen. Glücklicherweise ist Java sehr konventionell und ähnelt C ++, wenn Sie es kennen. Wir werden eine Bibliothek namens LibGDX verwenden. Die meisten OnlineTutorials für libGDX sind YouTube-Videos. Einige Ihrer "Lese" -Aufgaben dienen daher dem Ansehen von Videos. Mach mir keine Vorwürfe, das ist deine Generation bei der Arbeit. Ich versuche, anständigen Text zu produzieren, weil ich keinen gefunden habe. Wenn Sie ein anständiges libGDX-Handbuch online oder in gedruckter Form finden, möchte ich es wissen.

Worum geht es in diesem Kurs?  Eine Einführung in Spiele, Genres, Spieledesign.  Wie man computergestützte Spiele entwirft und implementiert  Grafiken, Datenstrukturen, Algorithmen, E / A ... Große Fragen:

Wie kann CS den Aufwand für die Entwicklung von Computerspielen reduzieren? Welche CS-Fähigkeiten können wir aus dem Studium von Spieldesign und -entwicklung lernen? Worum geht es in diesem Kurs NICHT?  Professionelle / technische Ausbildung für die Spielebranche.  DirectX, Direct3D oder andere plattformspezifische APIs  Verwendung von Tools zur Spielegenerierung, Modifikation oder "Level-Bearbeitung" von Spielen anderer Leute Was ist ein Spiel?

In diesem Kurs geht es um computergestützte Spiele. Was ist also ein Spiel? Können Sie definieren, was ein Spiel ist? Viele Definitionen verfehlen entweder die Marke oder verfehlen sie. Dictionary.com listet 24 Definitionen auf. Die wichtigsten Definitionen, die wir berücksichtigen werden, sind ein Spaß oder Hobby OK, aber sind es Filme und Fernsehspiele? Nein. eine wettbewerbsorientierte Aktivität, die Geschicklichkeit, Gelegenheit oder Ausdauer beinhaltet ...

Regeln haben usw. Der ersten Definition fehlt die Interaktivität oder geistige oder körperliche Bewegung, die mit der zweiten verbunden ist, aber sie erfasst den wichtigen Aspekt des Spaßes. Die zweite Definition verliert den "Spaß" und das Potenzial von kooperativen Spielen im Vergleich zu traditionellen Wettbewerbsspielen.

Wenn man das alles zusammenfügt, bekommt man so etwas wie: Eine wettbewerbsorientierte oder kooperative Aktivität, die Fähigkeiten, Chancen oder Ausdauer umfasst und deren Hauptziele Spaß, Verbesserung oder beides sind. "Leseaufgabe  Holen Sie sich das Lehrbuch. Lesen Sie den Anhang in Java Dr. Js kurze Meinung zur Geschichte der Computerspiele Geschichte ist nicht Gegenstand dieses Kurses, aber hier sind einige kurze Bezugspunkte. Wie viele der wegweisenden Spiele kennen Sie? Dieses Material wird in der Regel von Google aus dem Internet gesammelt und gelegentlich aus dem Gedächtnis des Autors ergänzt. 1952 Das erste Computerspiel (?) Könnte Alexander Douglas 'Computerversion von Tic-Tac-Toe (Noughts and Crosses) gewesen sein. Obwohl dies eine grafische Anzeige ist, kann es sich auch um ASCII-Grafik handeln

1958 Higinbotham bautTennis für zwei -59 Dies erfolgt auf einem analogen Computer. Das Display ist ein Oszilloskop. Hardware-Implementierung. Eine Instanz, die für öffentliche Demonstrationen gebaut wurde. Dies ist nicht Pong, aber es scheint gültig, sie als Vorgänger zu bezeichnen. Beweis, dass die Sportspiele vor den Schützen stattfanden.

Russel baut die SoftwareSpacewar Weitgehend als "Diagnosewerkzeug" repliziert. Inspirierte Unternehmer 1961 von Videospielen. 1970 in kommerzieller Existenz geklont. Ein -62 Vorläufer der Asteroiden. Creative Commons / Kenneth Lu 1960 Als sich der Weltraumkrieg langsam ausbreitete ... Spiele wie Dame, die von A / I-Pionieren in Betracht gezogen wurden. Die Ära der Lochkarten inspirierte auch triviale Simulationsspiele (z. B. Hamurabi).

70er eheliche Textspiele Rollenspiel Bleistift und ASCII-Kunst. Jahre Normalerweise rundenbasiert. Online == Modems: selten und institutionell.

Der Vorläufer von FPS:Mazewar

Arcade-Spiele. Pong, Space Invaders,Pac Mann... Ende der 70er 4K-64k-Pionier-PCs hatten oft Grafiken mit geringerer Wiedergabetreue Jahre als kommerzielle Kinos. Schau es dir anC64s.com

80er erste Multi-User-Spiele. (niedrige Auflösung) rundenbasierte Strategie. Jahre Beeindruckende Imperien von Konsolen-Franchise-Unternehmen wie Nintendo und Sega.

Sie können nostalgisch an eine oder mehrere ikonische Figuren und Franchise-Unternehmen gebunden sein, die zu dieser Zeit gegründet wurden, wie Mario: by

Ich liebe diese Zeit sehr, die geschlossene und kontrollierte Natur der Konsolenentwicklung von diesem Zeitpunkt an hat dunkle Auswirkungen auf die gesamte Videospielbranche. . 90er Die Software FPS, RTS Identification ist aus dem Doom-Spiel Jahre hervorgegangen, das PC-Spiele in den Vordergrund katapultierte und die intensive Entwicklung kostengünstiger 3D-Grafikhardware für den Massenmarkt vorantrieb.

MMRPG, ...

2K +

Aktuelle Plattformen  Wii U, Xbox One, PS4  PC und Mac

 Handheld und Handy  Tablets  Netz Die Kundenerwartungen sind in etwa proportional zu den Hardwarefunktionen jeder Plattform. Spieleentwicklung durch "Evolution" Die Spiele sind groß und komplex. Dieser Kurs kann als "spezialisierte und medienreiche Software-Engineering-Klasse" angesehen werden. Sie können versuchen, ein Spiel über das Wasserfallmodell zu erstellen:

Anforderungsanalyse

Design

Implementierung

 Der Spieler hat eine Idee, die in aktuellen Spielen nicht zu finden ist.  Die Idee wird erforscht und eine "Vision" für ein neues Spiel gemacht.  Spiel Benutzeroberfläche. Dateiformate. Netzwerkkommunikationsprotokolle.  Codierung und Kunst. Der Anteil variiert. Kunst ist eine überwältigende Kodierung in modernen kommerziellen Spielen.

Tests

 Stellen Sie Spieler für 7,25 USD / Stunde ein, um Ihr Spiel zu testen. Alpha- und Betatests.

Starten

 Starten Sie Ihr Spiel über einen Publisher und Distributor oder online.

Instandhaltung

 Wenn Sie so weit kommen, sind Sie erfolgreicher als 98% der Bemühungen des Spiels.

In Wirklichkeit ist das kaskadierende Modell für die Spieleentwicklung "völlig falsch", was wahrscheinlich einer "natürlichen Entwicklung" folgen sollte, was bedeutet, dass funktionierende Prototypen mit textuellen Darstellungen der Kernlogik des Spiels beginnen Einfache Grafiken und entwickeln sich dann in 3D und mehrfach leistungsfähiger. -Benutzerfähigkeiten. Unabhängig davon, ob sich jedes einzelne Spiel auf diese Weise entwickeln soll oder nicht, gibt es eine andere mögliche Anwendung der Metapher. Evolutionäre Folgerungshypothese: So wie behauptet wird, dass Embryonen, Feten und Säuglinge die frühen Stadien der Evolution unserer Spezies durchlaufen, könnte unsere individuelle Fähigkeit, Computerspiele zu schreiben, durch die Implementierung jedes Spiels und Genres von Spiel zu Spiel "wachsen" Spiel, das zuvor von unseren Vorfahren durchgeführt wurde. Wenn wir Oops klonen können, können wir über die Implementierung des Wow-Nachfolgers sprechen. Beliebte Spielgenres und -mechaniken Obwohl viele Spiele mehrere Genres umfassen Gesellschaftsspiele Computerversionen von manuellen Spielen können sehr beliebt sein. Textabenteuer Textspiele, bei denen die Spieler Rätsel und Rätsel lösen müssen Arkade 2D-Erkundungs- oder Überlebensspiele. Ego-Shooter 3D-Kampf- / Überlebensspiele in Echtzeit Woher weißt du, wann du gewinnst? Zu den beliebten Spielmechaniken gehören eine oder mehrere der folgenden: Überleben renne oder schieße, bis du stirbst. Beispiele: Space Invaders, Doom Flucht beim Verlassen gewinnen Völkermord Gewinnen Sie, indem Sie den Gegner eliminieren. Beispiel: Damen Mord Gewinne, indem du den feindlichen König tötest. Beispiel: Schach, Strategie. Sammlung

Verdienen Sie, indem Sie Ihre Sammlung seltener und exotischer (oder hergestellter) Gegenstände vervollständigen Gebäude baue großartige Dinge Magnat verdienen, indem Sie so viel Geld ansammeln Berühmtheit gewinnen Sie, indem Sie den größten "Ruhm" ansammeln Größenwahn gewinnen Sie durch die Eroberung der Welt, Napoleon / Alexander / Superschurke Taktik Gewinne eine Schlacht und erreiche bestimmte militärische Ziele Strategie Gewinne einen Krieg und besiege den Feind in mehreren Schlachten. Im Allgemeinen geht es darum, externe Ressourcen, externe Logistik oder wissenschaftliche Verbreitung zu vergeben. Beispiele: Zivilisation, Warcraft Erkundung gewinnen, etwas oder alles zu finden oder zu entdecken Rollenspiel du gewinnst nicht, du verbesserst nur deinen Charakter, du bekommst "xp" und du gewinnst "Level" ... Also mach dich an die Arbeit# einer Auf dem PC installieren:  Ein aktuelles Java JDK. Traditionell benötigt libGDX echtes Java von Sun, und dann war Oracle das einzige, das dies tun würde. Vielleicht könnte OpenJDK an dieser Stelle funktionieren, lesen Sie die libGDXDokumentation.  Eine IDE, sei es BlueJ, Netbeans oder Eclipse. Das Lehrbuch empfiehltBlueJals Ihre Java IDE. Ich werde BlueJ ausprobieren und empfehlen, dies auch zu tun, aber letztendlich können Sie jede Java-IDE oder jeden Texteditor verwenden, den Sie für praktisch halten.  BibliothekLibGDX. Die aktuelle Version auf der Website ist 1.9. Konferenz 2 Postsack

Gibt es einen bestimmten Grund, warum ich Oracle JDK (https://www.oracle.com/technetwork/java/javase/downloads/index.html) anstelle von OpenJDK (https://jdk.java.net/12) empfehle? /)? LibGDX setzt auf ausgefallenen Grafikcode unter der Haube. In der Vergangenheit funktionierten einige Versionen von LibGDX mit einigen OpenJDKs nicht. Ich habe gestern Abend ein aktuelles OpenJDK 11 ausprobiert und beim Versuch, das Standard-libGDX-Projekt auszuführen, einen kryptischen Fehler festgestellt. Heute Morgen habe ich einen BlueJ getestet, der mit einer eigenen Installation von OpenJDK 11 gegen die libgdx .jar von unserer Lehrbuch-Website geliefert wurde, und es hat funktioniert. Vielleicht könnte OpenJDK Version 12 noch besser funktionieren oder vielleicht auch nicht. Sie können OpenJDK einlesen und versuchen, es mit libGDX zu verwenden. Wenn OpenJDK Probleme verursacht, müssen Sie möglicherweise Oracle Java ausführen. Dies kann sich auf die IDEs auswirken, die Sie verwenden können. Sollte ich meinen Desktop-Computer mit einer GPU anstelle meines kleinen Laptops verwenden? In CS 328 würde es Ihnen auf Ihrem alten Laptop mit integrierter Grafik wahrscheinlich gut tun, obwohl Java ein Elch ist und die Kompilierungsgeschwindigkeit ein Problem sein könnte. In CS 428 können Sie mit einer GPU zufriedener sein. Kurze Einführung in Java Hier sind einige Highlights aus Stemkoskis Anhang B, vorausgesetzt, Sie sind mit C ++ vertraut, aber nicht mit Java.  sehr ähnlich zu C ++  Alles ist in einer Klasse, man kann keine einfachen Funktionen schreiben.  fast allein: skalare Typen und Objekte, aber nicht ganz  Skalartypen: int float double char boolean  Arrays haben eine feste Größe mit integrierter Syntax. Sie sind etwas anders geschrieben als in C / C ++, z. B. [] an Typ anhängen, nicht var name.  Der Zeichenfolgentyp ist eine Klasse, verfügt jedoch über einige spezielle integrierte Funktionen  Jedes Java-Programm beginnt mit a  public static void main (String [] args)

Und da jede Klasse, die Sie schreiben, eine davon haben kann, können Sie so viele Einstiegspunkte wie Klassen schreiben (kann jemand eine Verwendung dafür vorschlagen?)  Viele, viele andere Standardklassen; Viele sind portabel, aber viele plattformspezifisch  ohne Zeiger; implizite Referenzsemantik für Objekte  Keine lokalen Objekte im Stapel zugewiesen, ALLE Objekte, die vom Heap über new zugewiesen wurden  Verschiedene Arten von Standardcontainern für dynamische Datenstrukturen; Zum Beispiel sind Vektoren dynamische Matrizen. LibGDX verfügt jedoch möglicherweise über bessere Versionen der Standard-Java-Dynamik. Weniger (oder keine) Speicherbereinigung ist besser für Spiele.  etwas andere öffentliche / private Syntax; gewöhne dich daran, viel Publikum zu sagen  Kein Präprozessor, keine #define, umständlichere Formen symbolischer Konstanten  nur eindeutige Vererbung; Verwenden Sie viele Schnittstellen  Unser Buch verwendet einige ausgefeilte Java-Funktionen, für die es kein C ++ - Analog gibt, wie z. B. "Lambdas". Daher werden wir nach Bedarf mehr Java einführen. libGDX: Hinweise zum Einstieg Wie viele konnten bereits eine Demo von libGDX oder Pong ausführen?  YouTube-Videos auf der libgdx-Website sind sehr hilfreich.  libgdx scheint eher eine "Youtube-Kultur" zu haben als anständige Bücher. o Wir sollten wahrscheinlich eine Reihe von "erforderlichen" und / oder "empfohlenen" libgdx-Videos identifizieren. Ich werde Nominierungen annehmen.  Es gibt ein (kleines) Glas, dasDownloadsgenannt gdx-setup.jar  JDK muss bereits installiert sein, um es auszuführen. Wenn Sie Android möchten, installieren Sie auch das Android SDK vor

 Führen Sie mit java -jar gdx-setup.jar aus

 

           

o Name: was auch immer Sie wollen o Paket: anscheinend mindestens ein Punkt zwischen zwei Namen o Spielklasse - Ein legaler Java-Klassenname. Dies ist auch der Basisname einer primär generierten Java-Datei. Es scheint wie "nur ein Projekt spawnen". Tatsächlich generiert es eine schreckliche typische JavaVerzeichnisstruktur, die für IDEs wie Eclipse geeignet ist. Unser Lehrbuchautor scheint sich weniger um die Verwendung dieser Struktur zu kümmern, also braucht BlueJ sie vielleicht nicht wirklich, aber Gott, wenn Gradle sie braucht, stimme ich vollkommen zu. [jeffery @ zapp 328] $ du pong 72 pong / core / active 8 pong / core / src / edu / cs328 0) { speed.x = Math.max (Geschwindigkeit.x - Reibung.x * DeltaTime, 0); } Plus { speed.x = Math.min (Geschwindigkeit.x + Reibung.x * DeltaTime, 0); }} }} // Beschleunigung anwenden Geschwindigkeit.x + = Beschleunigung.x * DeltaTime; // Stellen Sie sicher, dass die Geschwindigkeit des Objekts die nicht überschreitet // positive oder negative Endgeschwindigkeit Geschwindigkeit.x = MathUtils.clamp (Geschwindigkeit.x, -terminalVelocity.x, terminalVelocity.x); }} GDX MathUtils  gefälschte Klasse, meist statische Methoden  Bereitstellung einer schnelleren und weniger genauen Mathematik für Spiele.  manchmal: Verwenden Sie Floats anstelle von Doubles  manchmal: Verwenden Sie die Tabellensuche anstelle der (langsamen) Anweisung

 Doppelklemme (x, min, max); Hinweise zum GDX-Anwendungscode "ApplicationListener implementieren" vs. "ApplicationAdapter erweitern" erweitert ApplicationAdapter, das von gradle gdx-setup verwendet wird, erbt die Standardversionen der sechs Funktionen, sodass es bei Bedarf überschrieben wird.  Die meisten kleineren GDX-Anwendungen profitieren von der ApplicationAdapter-Unterklasse  Wenn Sie alle sechs überschreiben, erhalten Sie nichts von ApplicationAdapter, sodass Sie es implementieren können. Orthographische Kamera für 2D; Für 3D können Sie zu einer perspektivischen Kamera wechseln SpriteBatch In diesem Zusammenhang ist ein "Stapel" eine Sammlung grafischer Operationen, die aus Leistungsgründen zusammen gespeichert werden. Ähnliche Konzepte (z. B. Anzeigelisten) finden sich in vielen GrafikAPIs. Textur Eine Textur ist ein 2D-Bild, das in einer größeren Szene verwendet wird. Es ist oft ein Füllmuster. In 3D (dreieckige Ausschnitte) werden die Texturen verwendet, um die Flächen der Dreiecke abzudecken. Auch in 3D: Viele Plattformen / APIs erfordern, dass 2D-Texturbilder eine Breite und Höhe von 2 haben. Später mehr dazu. Texturbereich Tatsächlich ist es in der Industrie ziemlich routinemäßig, eine ganze Tonne Texturen in einem einzigen großen 2D-Bild zusammenzusetzen und dann verschiedene kleine Texturen zu verwenden, um Füllmuster für verschiedene Objekte innerhalb einer Szene zu definieren. Elf Ein Sprite ist ein Objekt, mit dem ein Grafikobjekt innerhalb einer Szene platziert wird. Traditionell wurde der Begriff für 2D verwendet, und wenn der Ort nur ein (x, y) war, entsprach ein Sprite fast einer Textur. Da es auf OpenGL basiert, ist das Sprite-Konzept in GDX etwas ausgefeilter. Es kann sich drehen und skalieren und verweist auf eine TextureRegion, aus der der visuelle Inhalt stammt. Klassendiagramm für ein GDX-Spiel

Aus dem libGDX-Buch von Nair / Oehlke:

Pixmaps und Texturen  Wir haben zuvor Texturen gesehen, die eine Abstraktion von 2DBildern (normalerweise statisch) im Speicher der GPU sind.  Pixelkarten sind 2D-Pixelarrays im CPU-Speicher. Sie können gezeichnet und dann auf Texturen und dann auf dem Bildschirm geschrieben werden. Pixmap pixmap = neue Pixmap (Breite, Höhe, Format.RGBA8888); von com.badlogic.gdx.graphics.Pixmap pixmap.setColor (1, 0, 0, 0,5f); pixmap.fill (); // Zeichne eine gelbe X-Form auf das Quadrat pixmap.setColor (1, 1, 0, 1); pixmap.drawLine (0, 0, Breite, Höhe); pixmap.drawLine (Breite, 0, 0, Höhe); // Zeichne einen Cyan-Rand um den Platz

pixmap.setColor (0, 1, 1, 1); pixmap.drawRectangle (0, 0, Breite, Höhe); Textur Textur = neue Textur (Pixmap); Die Art, darüber nachzudenken, ist: Pixmap befindet sich im CPUSpeicher, die Textur befindet sich im GPU-Speicher. Pixmap kann leicht bearbeitet werden. Die Textur ist fast einmal schreibgeschützt. Polling versus ereignisgesteuerte Eingabe

Code wie if (Gdx.input.isKeyPressed (Keys.A)) ... ist ein Beispiel für eine Abfrage, "der kontinuierliche Ausführungsansatz".  Dies kann Ihre CPU zu 100% binden. sehr schlecht, besonders bei batteriebetriebenen Geräten.  Wenn in jedem Frame viele Eingabeelemente abgefragt werden sollen (z. B. jede Tastaturtaste), sinkt Ihre Framerate und Ihr Spiel reagiert nicht, selbst wenn die Aufnahme von 100% CPU in Ordnung ist.  Stattdessen soll Ihr Code für Ereignisse aufgerufen werden. LibGDX-Thema für heute: InputProcessor  Eine Reihe von Ereignis-Rückrufmethoden

 abstrahiert die traditionelle Low-Level-Tastatur im "Raw-Modus" (Spiele verwenden normalerweise keine gekochte Tastatureingabe der obersten Ebene, ein GUI-Element "Texteingabe-Widget" wäre die nächste logische Ebene).  Low-Level-Maus- / Touch-Eingabe (separater Mechanismus für HighLevel-Gesten)  LibGDX-Zielplattformen verfügen möglicherweise über Tastatur / Maus. Die Verwendung dieser Schnittstelle schränkt die Portabilität ein, sofern Sie keine alternativen Eingabemechanismen bereitstellen. Beispiel: PageUp-Taste zum Scrollen vor dem Mausrad vor der Geste "Scrollen" auf dem Touchscreen InputProcessor vs. InputAdapter  Laut ApplicationListener vs. ApplicationAdapter, LibGDX bietet eine Schnittstelle und eine Klasse, die Sie erweitern können.  Im Allgemeinen können Sie den InputAdapter erweitern, es sei denn, Ihre Klasse muss etwas anderes erweitern.  Dies ist ein wichtiger Teil der GDX-API mit dem kleinsten gemeinsamen Nenner, die auf allen unterstützten Plattformen ausgeführt werden muss. Zusammenfassung der InputProcessor-Schnittstelle boolean keyDown (int keycode); Beginn einer "Drücken" -Taste boolean keyUp (int keycode); Ende eines Schlüssels "Start" boolean keyTyped (Zeichen); oberste Ebene: Diese Taste wurde gedrückt. seltener in Videospielen, weil ... mouseMoved boolean (int x, int y); Zeigerposition, möglicherweise ohne Schlüssel Boolescher Wert verschoben (int Menge); Scrollrad, Menge kann positiv oder negativ sein boolean touchDown (int x, int y, int Zeiger, int Schaltfläche); Beginn des Mausklicks oder Fingers "drücken" boolean touchDragged (int x, int y, int pointer); Zeigerbewegung, während ein Zeiger "drückt" boolesche Nachbesserung (int x, int y, int Zeiger, int Schaltfläche);

Ende eines Mausklicks oder "Loslassen" mit dem Finger  Vergleichen Sie keyDown / KeyUp der unteren Ebene mit der Taste der obersten Ebene  Wechsel von der Zeichenfolge von "if" -Anweisungen zu einer Änderung, z. B. in keyUp ()  Die API mit dem kleinsten gemeinsamen Nenner enthält viele Tei...


Similar Free PDFs