LUAScript - Variablen ändern in Echtzeit?
Übersicht

SlasHeRBetreff: LUAScript - Variablen ändern in Echtzeit? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich überlege immernoch ob ich den Titel des Threads richtig gewählt habe..
Nunja ich bin mit der LUA-Geschichte nun schon etwas vorran gekommen, Jolinah hat den Code erweitert und Tablesupport hinzugefügt... Allerdings sehr langsam das ganz 2 sekunden!? Egal darauf will ich garnicht eingehen sondern eher auf mein Problem: Code: [AUSKLAPPEN] //Pseudocode var1 = "wert1" print var1 runscript(scriptname, ) // führt das lua script aus, und ruft funktion foo auf, mit dem parameter: var1 print var1 Das Lua-Script sieht in etwa so dazu aus: Code: [AUSKLAPPEN] function foo(var1) var1 = "wert2" end Wie weise ich den wert2 überhaupt var1 zu ohne eine weitere funktion zu erstellen? Bzw. wie muss der BlitzMax Code aussehen, ohne dass ich den Lua-Script code verändern muss, damit BMax die Veränderung der Variable merkt? EDIT: Ich bin grade dabei eine Lösung dafür zu besorgen, Stichwort Metatables. Sobald ich was habe, werde ich es hier posten. Falls jemand anders schon eine Lösung hat, würde ich mich trotzdem drüber freuen |
||
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
also ich habe das mal so in der Art gemacht main.bmx: Code: [AUSKLAPPEN] Global SEObject:ScriptEngine = New ScriptEngine SEObject.AddFunction(LUA_SetValues,"SetValues") Global text:String="wert1" global wert1:int,wert2:int Function LUA_SetValues:Int(ls:Byte Ptr) text = SEObject.CheckString(ls,1) wert1 = SEObject.CheckNumber(ls,2) wert2 = SEObject.CheckNumber(ls,3) End Function If (Not SEObject.RunScriptFile("test.lua")) Then Notify "Error: " + SEObject.GetLastErrorString() endif test.lua: Code: [AUSKLAPPEN] SetValues("wert2",2,3) Hab das LUA Modul gar nicht mehr. ![]() Weiß vielleicht jemand wo man das her bekommt? mfg |
||
SlasHeR |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem ist, das es objektorientiert sein muss.
Ich habe aber schon eine Lösung gefunden: bchar.lua Code: [AUSKLAPPEN] module("bchar", package.seeall) local mt = {} local methods = {} -- BMAX-Lesen function mt:__index (key) if key == "x" then return Char_GetX(self.data.id) end if methods[key] ~= nil then return methods[key] end return self[key] end -- BMAX-Schreiben function mt:__newindex (key, value) if key == "x" then Char_SetX(self.data.id, value) return end self[key] = value end -- functions function create (id) local o = {} o.data = {} o.data.id = id setmetatable(o, mt) return o end Code: [AUSKLAPPEN] require "bchar" function Char_SetX (id, value) MyPrint ("Schreibe X für ID:" .. id) end function Char_GetX (id) MyPrint ("Lese X für ID:" .. id) return 12345 end function test() --Erstelle ein neues bchar-Objekt local pl = bchar.create(123) pl.x = 1337 --schreiben print(pl.x) --lesen end test() Die Funktionen wie function Char_SetX (id, value) kann man dann in Bmax proggen und nach LUA als Funktion exportieren, um dann z.b. die Variablen zu ändern. Somit hat man dann richtige Objekte auch in LUA. Das einzige woran es noch hängt ist so ein Objekt aus BMAX nach Lua zu senden. Ich wollte eigentlich erst darauf warten und dann ein kleines Tutorial dazu schreiben, wenns läuft. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group