1 / 35

Game Development with Lua Kapitel 1-5

Game Development with Lua Kapitel 1-5. Seminar: Re-usable Content in 3D und Simulationssystemen Dozent: Prof. Dr. Manfred Thaller Referentin: Nadya Steinert. Zunahme an Komplexität. Heutzutage arbeiten ganze spezialisierte Teams für Monate an einem einfachen Spiel

baylee
Download Presentation

Game Development with Lua Kapitel 1-5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Game Development with LuaKapitel 1-5 Seminar: Re-usable Content in 3D und Simulationssystemen Dozent: Prof. Dr. Manfred Thaller Referentin: Nadya Steinert

  2. Zunahme an Komplexität • Heutzutage arbeiten ganze spezialisierte Teams für Monate an einem einfachen Spiel • Die Komplexität der Spiele nimmt zu und gleichzeitig die Abhängigkeit zwischen Spielsysteme • Ein Designer z.B. müsste seine Ideen dem Programmierer erklären, nachdem er sie implementiert hat, musste alles von neu anfangen

  3. Eine bessere Idee • Eine Scriptsprache ist eine gute Lösung • Scriptsprachen werden normalerweise in Laufzeit ausgeführt und erlauben leichte Operationen mit den Daten • Scriptsprachen erlauben, dass auch Personen an der Entwicklung teilnehmen, die mit dem Programmieren nicht vertraut sind

  4. Warum Lua? • Lua ist kostenlos, klein, schnell und kann leicht mitgenommen werden; Die Ausführungszeit ist sehr kurz • Die Kombination von einer Scriptsprache und eine Hohe Programmiersprache wie C und C++ gibt die Möglichkeit Sachen wie Speicherverwaltung und Objektrendering dem Programmierer zu übergeben und gleichzeitig an Design und Interface zu arbeiten

  5. Einführung zu Lua • Lua ist eine „glue“- Sprache, sie „klebt“ zusammen Funktionen von anderen Sprachen • Es können neue Funktionen gebildet werden • „Hello World!“ in Lua:

  6. Mit Lua kann das Ganze GUI für ein Spiel ohne Programmiererhilfe gemeistert werden • Lua wurde entworfen als kleine , effiziente Scriptsprache, die sehr gut mit C und C++ arbeitet; sie ist eine von der schnellsten dieser Art

  7. Scriptsprachen und Spiele • C++ Funktionen können speziell geschrieben werden, so dass man die Möglichkeiten von Lua benutzt, diese aufzurufen und zu verbinden • Z.B. Lua kann ein 3D Objekt in die Spielwelt platzieren, sie fordert C++ auf, ein Objekt von einem bestimmten Typ zu erzeugen und indiziert sein Platz; sie fordert die Transformation des Objektes ohne mit der komplizierten Mathematik zu tun zu haben

  8. Lua kann benutzt werden um folgende Aufgaben zu erfüllen: • Erstellen von UI für ein Spiel • Definieren, lagern und verwalten von Spieldaten • Real-Time Game Events verwalten • Erstellen von KI-System und s. w.

  9. UI: schnelles Anlegen und Platzieren aller wichtigen Interface Elemente, Benutzer-Input verwalten, Spieldaten ausgeben • Spieldaten verwalten: Daten können in Lua-Files ausgelagert werden und später in runtime geladen werden • Event Handling: Event-System in C++ gestalten und Lua für bekommen und abarbeiten der Events benutzen

  10. Speichern und laden von Game State: Daten von GameState als Lua-File speichern und ausführen • KI: basiert auf Parameter und limitierte Daten; wenn World State und Event Handling Lua benutzen, gibt es auch größeres Spielfeld für KI in Lua

  11. Benutzen der Lua -Konsole • Ein Lua Script ist ein Textfile.lua mit Lua-Befehle • Lua‘s Syntax ist einfach, es sind nur Leerstellen zwischen den Befehlen nötig • Lua Script Files statt einfache Befehle

  12. Befehl dofile() gibt alle Lua Scripts wieder ausser die Glue Funktionen geschrieben in C++

  13. Semantic • Variablen und Funktionsnamen dürfen nicht mit einer Ziffer anfangen • Keine Großbuchstaben nach einem Unterstrich • -- Das ist ein Komentar --[[ hier stehen mehrere Zeilen --]] • Lua‘s reservierte Wörter:

  14. Variable: müssen nicht deklariert werden, haben keinen Variablentyp; Die Variable ist von dem Typ von dem die nachfolgende Daten sind • Die Funktion type() zeigt den Typ der Variable • Variablentypen: nil, boolean, string, table Nil zeigt Variable ohne Wert String kann von ein Paar bis Millionen Character haben

  15. Number können in solcher Art representiert werden:

  16. Table ist wie ein Array

  17. Globale und lokale Variable: die Variable sind normallerweise global; lokale Variable können in einer Funktion oder Kontrollstruktur deklariert werden; sie werden gelöscht mit ende der Funktion bzw. die Kontrollstruktur • Arithmetische Operatoren: + - * / • Relationsoperatoren: a==b, a~=b(nicht gleich), a<b, a>b, a<=b, a>=b Bei Table hat man nicht direkt mit den einzelnen Werten zu tun, sie müssen separat wie bei Arrays verglichen werden und nicht die Tables selbst

  18. Logische Operatoren: and ,or, not And vergleicht zwei Werte, wenn der erste falsch ist wird er zurückgegeben, wenn nicht, der zweite Or gibt den ersten Wert zurück wenn er true ist Not gibt immer true oder false zurück

  19. Kontrollstrukturen: enden alle mit end • If else Struktur identisch wie in c++ • While indx=1 while indx<10 do Print(„loop pass: „,indx) indx=indx+1 end Repeat indx=1 repeat print(„loop pass: „,indx) indx=indx+1 until indx>10

  20. For for indx = 1,10 do print(indx) end(die Zahlen von 1 bis zehn) for indx =10,1, -1(von 10 bis 1) for indx = 1,100,2 (von 1 bis 100 nur die ungeraden) • Break unterbricht eine Schleife

  21. Weiter in Lua • Funktionen: eine Funktion kann ein Prozess durchführen oder einen Wert zurückgeben • Geladene Funktionen werden nicht sofort ausgeführt, sondern nach Aufruf

  22. Funktionen können einen, mehrere oder unbekannte Anzahl an Argumeneten haben • Sie können mehrere Werte ,getrennt durch Komma zurückgeben

  23. Standardbibliotheken • assert(myValue)() : man gibt eine Variable an,die auf einen kompilierten Lua-Script zeigt und er wird sofort ausgeführt • dofile(filename): lädt lua script Files und führt sie aus, oder Funktionen die später aufgerufen werden können, oder Data Files

  24. Mathematische Funktionen: Lua ermöglicht Zugang zu den C++ Mathe-Funktionen durch Gluefunktions • math.floor() rundet eine Flieskommazahl zu einer ganzen Zahl • math.random() erzeugt ein zufälliger Wert normalerweise zwischen 0 und 1; man kann aber minimalen und maximalen Wert angeben • math.min() und max: können Parameter bekommen und den minimalen bzw. maximalen Wert ausgeben

  25. Strings • Typkonvertierung: eine Zahl kann in ein String konvertiert werden ( tostring()) und umgekehr t( tonumber())

  26. String.len(myString) gibt die Länge des Strings an • String.sub(myString,start,end) gibt einen Teil des Strings zurück, der bei start anfängt und bei end endet • String.format() fügt einem String einen anderen hinzu

  27. Bildet komplexere Strings von kleineren %s steht für string , %d für Zahlen • String.find(sourceString, findString) sucht in dem sourcestring nach dem findstring und gibt die start und endposition an • Strings und Modelle

  28. String.gsub(sourceString,pattern,replacementString): ersetzt im Sourcestring den Patternstring mit dem replacementstring

  29. Mehr über Tables • Table.getn(myTable) gibt die Anzahl der enthaltenen Perameter an • Table.insert(myTable,position,value): fügt einen neuen Wert hinzu, entweder am Ende oder an der angegebenen Stelle und reindext die Liste • Table.remove(myTable,position): entfernt einen Wert von dem Table, wenn keine Position angegeben den letzten und reindext • Tables können auch andere Werte als numerische annehmen

  30. Multidimensionale Tables: • Pairs() : gibt den Index und den Wert von einer Multidimensionalen Tbelle

  31. Basic I/O • Um in eine Datei zu schreiben, muss erst eine aufgemacht werden: myFile=io.open(„test_data.lua“, „w“) Der erste Argument ist die Datei in die geschrieben wird, der zweite Parameter zeigt dass nur geschrieben werden kann:

More Related