Lua Anwendung in BMax
Übersicht

![]() |
Wild-StormBetreff: Lua Anwendung in BMax |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heyho, als wiedereinstieg in die Community poste ich erstmal ein kleines Tutorial, welches die Anwendung der lua-scriptengine in BMax behandelt. Die Module sind NICHT in PUB auffindbar, sondern in AXE!
also, viel Spaß beim Lernen^^ Als Erstes importieren wir die notwendigen Module Code: [AUSKLAPPEN] Import axe.luascript Import axe.lua Code: [AUSKLAPPEN] Global scriptEnv:TLuaScriptEngine = New TLuaScriptEngine Hiermit erstellen wir die Variable ScriptEnv (für Scriptengine Environment, also Scriptsprachen Umgebung xD) Nun starten wir praktisch die Engine und setzen alles zurück, was wir möglicherweise davor schon der Variable scriptEnv "eingeflöst" haben Code: [AUSKLAPPEN] scriptEnv.Reset() Cool, die Engine läuft also! Aber was jetzt? Wie wäre es mal mit "Hello World!"? Also erstellen wir uns eine Textdatei mit dem Namen: "Test1.lua" Der Inhalt der Datei soll Code: [AUSKLAPPEN] Print("Hello World!") lauten. Naja, jetzt müssen wir eigentlich die Datei nurnoch ausführen! Dies schaffen wir, indem wir Code: [AUSKLAPPEN] scriptEnv.RunScriptFile("test1.lua") in Bmax schreiben. Zu guter letzt wollen wir natürlich die Scriptengine wieder runterfahren, um z.B. Speicher freizugeben. Dies geschieht ganz einfach mit: Code: [AUSKLAPPEN] scriptEnv.ShutDown() Ist doch recht easy oder? Hier nochmal der ganze Code: Code: [AUSKLAPPEN] Superstrict 'Muss nicht sein Import axe.luascript Import axe.lua Global scriptEnv:TLuaScriptEngine = New TLuaScriptEngine scriptEnv.Reset() scriptEnv.RunScriptFile("test1.lua") scriptEnv.ShutDown() Aber wir wollen jetzt auch eigene Funktionen in LUA integrieren. Schliesslich soll unsere Scriptsprache nicht nur was per "Print" auf den Bildschirm schreiben! Also starten wir wieder unsere Scriptengine! Code: [AUSKLAPPEN] Superstrict 'Muss nicht sein Import axe.luascript Import axe.lua Global scriptEnv:TLuaScriptEngine = New TLuaScriptEngine scriptEnv.Reset() Jetzt kommt der spannende Teil, wie kann ich meine eigene Funktion in LUA adden und Variablen lesen? Als erstes schreiben wir uns schnell eine neue .lua Datei. z.B. test2.lua. Der Inhalt soll wie folgt lauten: Code: [AUSKLAPPEN] F_GreetTest1("Wild-Storm") Print(F_GreetTest2("WS")) und nun zum BMax Code! Fangen wir damit an, dass wir die Funktion "F_GreetTest1" zu lua hinzufügen wollen! Dazu schreiben wir erstmal in BMax eine eigene Funktion, die einen Integerwert zurückgibt! Diese kann beliebig heißen! z.b. LUA_Greet1! Also machen wir uns ans Werk Code: [AUSKLAPPEN] Function LUA_Greet1:Int( luaState:Byte Ptr ) Als nächstes wollen wir den Namen, den wir grüßen, wissen. In dem Fall ist es "Wild-Storm", da wir ja "F_GreetTest1("Wild-Storm")" geschrieben haben! Dazu schreiben wir: Code: [AUSKLAPPEN] Local name$=scriptEnv.CheckString(-1) Was ist aber, wenn unsere Funktion mehr als ein Parameter hat? Naja ganz einfach, das 1. Parameter hat den Wert von -1, das 2. Parmeter hat den Wert von -2 usw. Hier ein Beispiel (NICHT in den Bmax COde integrieren, es dient nur zur Veranschaulichung!!) Code: [AUSKLAPPEN] Local name1$=scriptEnv.CheckString(-1) Local greet$=scriptEnv.CheckString(-2) Local name2$=scriptEnv.CheckString(-3) So, wir haben also unseren Namen. Jetzt schreiben wir das einfach auf den Bildschirm (in BMax) Code: [AUSKLAPPEN] Print("Hello, "+name$+"!") und zu guter letzt schliessen wir die gesamte Funktion. Code: [AUSKLAPPEN] Return 1 End Function Jetzt gilt es nurnoch, die neu geschrieben Funktion LUA beizubringen...Das geht aber ganz einfach mit einem Befehl: Code: [AUSKLAPPEN] scriptEnv.AddFunction(LUA_Greet1,"F_GreetTest1") Das erste Parameter trägt den Namen der BMax Funktion und das zweite steht für den Namen, den LUA dafür bekommt! Ist doch recht easy, oder? Insgesamt sieht das dann so aus: Code: [AUSKLAPPEN] SuperStrict Import axe.luascript Import axe.lua Global scriptEnv:TLuaScriptEngine = New TLuaScriptEngine scriptEnv.Reset() Function LUA_Greet1:Int( luastate:Byte Ptr ) Local name$=scriptEnv.CheckString(-1) Print("Hello, "+name$+"!") Return 1 End Function scriptEnv.AddFunction(LUA_Greet1,"F_GreetTest1") scriptEnv.RunScriptFile("test2.lua") scriptEnv.ShutDown() Nunja, jetzt wollen wir noch ein Parameter an LUA zurückgeben, das geht relativ einfach..Dazu schreiben wir uns eine neue Funktion: Code: [AUSKLAPPEN] Function LUA_Greet2:Int( luastate:Byte Ptr ) Local name$=scriptEnv.CheckString(-1) scriptEnv.ReturnStringToLua("Hello, "+name$+"!") Return 1 End Function Na? Den neuen Befehl entdeckt? Wahrscheinlich schon, oder? ^^ Mit scriptEnv.ReturnStringToLua("Hello, "+name$+"!") geben wir der Funktion einen Returnwert. In diesem Fall: "Hello, WS!" Und zuletzt übergeben wir die Funktion an LUA: Code: [AUSKLAPPEN] scriptEnv.AddFunction(LUA_Greet2,"F_GreetTest2") Alles recht easy, nich? ^^ So hier noch der komplette Code: Code: [AUSKLAPPEN] SuperStrict Import axe.luascript Import axe.lua Global scriptEnv:TLuaScriptEngine = New TLuaScriptEngine scriptEnv.Reset() Function LUA_Greet1:Int( luastate:Byte Ptr ) Local name$=scriptEnv.CheckString(-1) Print("Hello, "+name$+"!") Return 1 End Function Function LUA_Greet2:Int( luastate:Byte Ptr ) Local name$=scriptEnv.CheckString(-1) scriptEnv.ReturnStringToLua("Hello, "+name$+"!") Return 1 End Function scriptEnv.AddFunction(LUA_Greet1,"F_GreetTest1") scriptEnv.AddFunction(LUA_Greet2,"F_GreetTest2") scriptEnv.RunScriptFile("test2.lua") scriptEnv.ShutDown() Wenn ihr Fehler finden solltet, meldet sie doch bitte! Auch Ergänzungen sind erwünscht. Über sonstiges Lob oder Kritik würde ich mich freuen! mfg Wild-Storm Getestet in BMax 1.22. Das Tutorial basiert auf den englischen Versionen (siehe nächster Absatz), die allerdings mit der BMax Beta geschrieben wurden und deshalb leicht fehlerhaft sind! http://www.blitzwiki.org/index.php/Lua_Tutorial http://www.blitzwiki.org/index...ion_to_Lua |
||
Visit http://www.next-dimension.org
------------------------------------------------- Freeware Modelle, Texturen & Sounds: http://www.blitzforum.de/forum...hp?t=12875 |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, das mit dem Printen funktioniert aber nicht, solange man nicht auch eine Print-Wrapper Funktion geschrieben und Lua übergeben hat:
Code: [AUSKLAPPEN] Function Print2:Int(luastate:Byte Ptr)
Print(scriptEnv.CheckString( - 1) ) Return 1 End Function scriptEnv.AddFunction(Print2,"Print") |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Doch, du musst aber im Script "print" kleinschreiben, dann geht es. (Soweit ich es in Erinnerung habe)
@Wild-Storm: Danke für das Tutorial ![]() |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Can't find interface axe.luascript
auch nicht mit pub vorn... was nun? |
||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Der Thread ist alt.
2. Der Thread ist tot. 3. axe.lua und axe.luascript könnte man für tot erklären, da in BlitzMax zwei Lua-Module integriert wurden: pub.Lua und brl.MaxLua Wenn du axe.luascript unbedingt nutzen möchtest, musst du es dir aus den Tiefen des Internets heraussuchen. (Es ist aber wahrscheinlich, dass daran wegen dem offiziellen Modul nicht mehr weitergearbeitet wird.) mfG mpmxyz Edit: Ja, lese dir einfach mal die Dokumentation durch und du wirst es finden! |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
- Zuletzt bearbeitet von mpmxyz am Do, Mai 27, 2010 21:13, insgesamt 2-mal bearbeitet
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
BRL.MAXLUA?
nochnie was von gehört, ist da bei der standart installation bei? |
||
Portfolio |LinkedIn |XING |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
BRL.MaxLua wird das sein was du suchst, weiterhin gibt es Pub.Lua.
Edit: Zu spät... und ja, ist es. MfG DaysShadow |
||
Blessed is the mind too small for doubt |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finde es in den Doc's nicht, warum? | ||
Portfolio |LinkedIn |XING |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, zu doof zum suchen? ![]() System -> Lua Scripting. |
||
Blessed is the mind too small for doubt |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
hppf... kann sein..
Das hatte ich wohl überlesen, weils mit "max" anfing, und nicht mit "lua" ![]() |
||
Portfolio |LinkedIn |XING |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group