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

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

Embed Size (px)

Citation preview

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

1

Game Development with LuaKapitel 1-5

Seminar: Re-usable Content in 3D und SimulationssystemenDozent: Prof. Dr. Manfred ThallerReferentin: Nadya Steinert

Page 2: 1 Game Development with Lua Kapitel 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

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

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

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

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

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

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:

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

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

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

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

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

8

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

9

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.

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

10

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

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

11

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

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

12

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

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

13

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

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

14

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:

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

15

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

16

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

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

17

Number können in solcher Art representiert werden:

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

18

Table ist wie ein Array

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

19

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

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

20

Logische Operatoren: and ,or, notAnd 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

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

21

Kontrollstrukturen: enden alle mit end– If else Struktur identisch wie in c++– While indx=1while indx<10 doPrint(„loop pass: „,indx) indx=indx+1 end

Repeatindx=1repeat print(„loop pass: „,indx) indx=indx+1 until indx>10

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

22

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

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

23

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

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

24

Funktionen können einen, mehrere oder unbekannte Anzahl an Argumeneten haben

Sie können mehrere Werte ,getrennt durch Komma zurückgeben

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

25

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

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

26

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

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

27

Strings

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

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

28

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

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

29

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

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

30

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

31

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

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

32

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

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

33

Multidimensionale Tables: Pairs() : gibt den Index und den Wert von

einer Multidimensionalen Tbelle

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

34

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:

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

35