Irrlicht - from Noob to pro: Einführung in Lua

Aus Wikibooks
Zur Navigation springen Zur Suche springen
Wikibooks buchseite.svg Zurück zu "Open Dynamics Engine" | One wikibook.svg Hoch zu "Inhaltsverzeichnis" | Wikibooks buchseite.svg Vor zu "C++ Code von Lua aufrufen"


Allgemeines[Bearbeiten]

Skriptsprachen[Bearbeiten]

Lua ist eine imperative Skriptsprache. Somit programmiert man keine Lua-Programme sondern viel mehr Skripte. Der Unterschied dabei ist, dass Programme von einem Compiler kompiliert, also von echten Code in ein Exe-Format übersetzt werden und Skripte lediglich von einem Interpreter interpretiert werden. Interpretierte Skripte sind langsamer, da sie zur Laufzeit erst interpretiert werden, während das Programm schon fertig übersetzt ist. Daher ist es sehr wichtig zu überlegen, wo und wann Skripte zum Einsatz kommen.

In Skripte sollten lediglich dynamische Dinge ausgelagert werden. Üblicherweise wird die Künstliche Intelligenz in Skripte ausgelagert um so ohne den Code erneut zu übersetzen das Verhalten zu verändern. Ein anderes Beispiel wäre Modding. Oft wird eine Skriptanbindung an ein Spiel programmiert, worüber Modder das Verhalten des Spiels verändern können, ohne Zugriff auf den Code selbst haben zu müssen. Speziell für Lua ist "World of Warcraft" das wohl bekannteste Beispiel.

Lua[Bearbeiten]

Lua wurde Mitte der 90er Jahre für Lehrzwecke an der Universität von Rio de Janeiro entwickelt. Lua wurde sehr dynamisch und flexibel konzipiert, sodass man es ohne Probleme gut erweitern kann und in der Regel auf jeder Plattform unterstützt wird (Crossplattforming). Zudem ist es sehr einfach und mächtig von C/C++ aus auf Lua zuzugreifen und umgekehrt. Daher ist es perfekt dafür geeignet um zusätzlich zu Irrlicht eingesetzt zu werden.

Download[Bearbeiten]

Lua kann auf der offiziellen Homepage downgeloaded werden. Die aktuellste Version ist 5.1 (Stand 2.4.2011). Für viele Plattformen gibt es Installer, die Lua korrekt einrichten um sowohl Luaskripte als auch C/C++ Programme, die mit Lua interagieren, zu schreiben. Dabei werden die entsprechenden Header und Bibliotheken plattformspezifisch in die jeweiligen Verzeichnisse kopiert, die dann wieder in der jeweiligen IDE als zusätzliche Abhängigkeit angegeben werden können. Außerdem wird eine IDE (Scite), wie sie schon von Autoit bekannt sein könnte, installiert.

Das Lua SDK[Bearbeiten]

Natürlich ist es auch möglich Lua als Sourcecode downzuloaden und selbst zu kompilieren, um eventuell Änderungen vorzunehmen. Dabei sollte man den Anweisungen in der Datei INSTALL folge leisten und bestenfalls unter Windows das komplette Cygwin sowie Gnu Make installieren um von der Kommandozeile aus Makefiles auszuführen. Die dadurch entstandenen Bibliotheken können dann wieder an entsprechende Stelle kopiert werden um sie dann wieder in der IDE als Abhängigkeit anzugeben.

Das erste Lua Skript[Bearbeiten]

Man hat zwei Möglichkeiten Lua Skripte zu erstellen. Einerseits kann man über die Kommandozeile (auch unter Windows) lua eingeben und so den Liveinterpreter starten, der die Benutzereingaben als temporäres File interpretiert und zur Laufzeit ausführt. Dies ist besonders zu empfehlen um kleinere Tests oder Skripte zu verfassen. Sollten größere Tests oder größere/große Skripte anfallen, sollten diese mit eine IDE (z.b.: Scite) erstellt und getestet werden. Wir gehen davon aus, dass alle Skripte mit Scite erstellt wurden. Um ein lua Skript mit Scite zu erstellen geht man wie folgt vor:

  1. Man öffnet Scite und öffnet eine neue Datei
  2. Diese Datei speichert man als first.lua
  3. Man gebe nun folgendes ein

    print 'Hello World'
    

  4. Man erzeugt den Lua Bytecode und startet das Programm (unter Scite Ctrl + F7, F5 bzw. das blaue Dreieck in der Menuleiste)

Es müsste nun die Zeile Hello World ausgegeben werden. Derzeit nichts spektakuläres, aber wir stehen ja erst am Anfang. Auffallen sollte aber schon, dass zur Ausgabe eines Strings lediglich eine Zeile ausreicht. Als Vergleich dazu das Programm mit dem gleichen Effekt in C++

#include <iostream>
using namespace std;

int main(int argc, const char* argv[])
{
  cout << "Hello World" << endl;
  cin.get();

  return 0;
}

In Lua ist aber noch vieles mehr möglich. Man kann wie aus nahezu allen Programmier- und Skriptsprachen gewohnt Schleifen, Verzweigungen, Vergleiche und I/O-Routinen benutzen. In Lua ist es zusätzlich möglich C/C++ Code auszuführen und von C/C++ Code aufgerufen zu werden. Da dies nur ein Einstieg und kein Lua Kurs werden soll, sei an dieser Stelle auf einige Quellen verwiesen.