Game Development with Lua N Steinert

Download Report

Transcript Game Development with Lua N Steinert

Game Development with Lua
Kapitel 1-5
Seminar: Re-usable Content in 3D
und Simulationssystemen
Dozent: Prof. Dr. Manfred Thaller
Referentin: Nadya Steinert
1
Zunahme an Komplexität



2
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
Eine bessere Idee



3
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
Warum Lua?


4
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
Einführung zu Lua



5
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
Scriptsprachen und Spiele


7
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:
–
–
–
–
9
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.



10
UI: schnelles Anlegen und Platzieren aller
wichtigen Interface Elemente, Benutzer-Input
verwalten, Spieldaten ausgeben
Spieldaten verwalten: Daten können in LuaFiles 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


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
Benutzen der Lua -Konsole



12
Ein Lua Script ist ein Textfile.lua mit LuaBefehle
Lua‘s Syntax ist einfach, es sind nur
Leerstellen zwischen den Befehlen nötig
Lua Script Files statt einfache Befehle

13
Befehl dofile() gibt alle Lua Scripts wieder
ausser die Glue Funktionen geschrieben in
C++
Semantic




14
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:
15



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

17
Number können in solcher Art representiert
werden:

18
Table ist wie ein Array
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

19

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
20

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
21
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

22
Weiter in Lua


23
Funktionen: eine Funktion kann ein Prozess
durchführen oder einen Wert zurückgeben
Geladene Funktionen werden nicht sofort
ausgeführt, sondern nach Aufruf


24
Funktionen können einen, mehrere oder
unbekannte Anzahl an Argumeneten haben
Sie können mehrere Werte ,getrennt durch
Komma zurückgeben
Standardbibliotheken


25
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

Mathematische Funktionen: Lua ermöglicht Zugang
zu den C++ Mathe-Funktionen durch Gluefunktions
–
–
–
26
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
Strings

27
Typkonvertierung: eine Zahl kann in ein
String konvertiert werden ( tostring()) und
umgekehr t( tonumber())



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
Bildet komplexere Strings von kleineren
%s steht für string , %d für Zahlen


29
String.find(sourceString, findString) sucht in
dem sourcestring nach dem findstring und
gibt die start und endposition an
Strings und Modelle
30

31
String.gsub(sourceString,pattern,replacemen
tString): ersetzt im Sourcestring den
Patternstring mit dem replacementstring
Mehr über Tables




32
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


33
Multidimensionale Tables:
Pairs() : gibt den Index und den Wert von
einer Multidimensionalen Tbelle
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:

34
35