LUA-Scripting?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: LUA-Scripting?

BeitragMo, Apr 17, 2017 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich lese mich aktuell in das MaxLUA-Modul ein und habe schon ein paar Verständnisfragen:
1. Wie kann ich dem LUA Funktionen beibringen? Es gibt ein LuaRegisterObject, mit dem könnte ich auf die Methoden dieses Objektes zugreifen, ich möchte aber kein Objekt, sondern eine Funktion bekannt machen.
2. Wenn ich nun die Funktionen registriert habe, wie kann ich LUA-Code ausführen? Ich sehe in der Dokumentation (die wie immer zu wünschen übrig lässt Rolling Eyes) nur, dass ein Invoke auf eine LUA-Funktion gemacht wird. Heißt das, ich muss "Einstiegspunkte" definieren?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Mathias-Kwiatkowski

BeitragDi, Apr 18, 2017 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
das würde mich auch brennend interessieren

folgende links habe ich aber gefunde, du wahrscheinlich auch

https://en.wikibooks.org/wiki/...es/Axe/Lua

https://en.wikibooks.org/wiki/..._scripting

http://lua-users.org/wiki/BlitzMax

vieleicht ist das thread auch noch interessant

https://www.blitzforum.de/foru...p?p=392572
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017
 

CO2

ehemals "SirMO"

BeitragDi, Apr 18, 2017 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

vielen Dank für Deine Antwort. Die Links hatte ich mir auch schon angeschaut. Es scheint zwei größere BlitzMax-Lua-Module zu geben. MaxLUA scheint das von BRL zu sein und AxeLua ein öffentliches. Ich habe vorher nichts mit LUA zu tun gehabt, und wollte mir das mal anschauen. Ich habe mich jetzt oberflächlich in MaxLUA eingearbeitet und es ist auf den zweiten Blick doch ziemlich logisch...

Was ich bisher gemacht habe:
BlitzMax: [AUSKLAPPEN]
Function ReadAllLines:String(stream:TStream)
If (Not stream Or Eof(stream)) Then Return

Local pos:Int = StreamPos(stream)

Local retval:String = ""
Repeat
retval = retval + "~n" + ReadLine(stream)
Until Eof(stream)

SeekStream(stream, pos)

Return retval
End Function


Type TLuaEngine
Method Add:Int(a:Int, b:Int)
Return a + b
End Method

Method PrintText(str:String)
Print(str)
End Method
End Type

Local luaEngine:TLuaEngine = New TLuaEngine

LuaRegisterObject(luaEngine, "lua")

Local script:TStream = ReadStream("script.lua")
Local source:String = ReadAllLines(script)
CloseStream(script)

Local luaClass:TLuaClass = TLuaClass.Create(source)

Local luaInstance:TLuaObject = TLuaObject.Create(luaClass, Null)
luaInstance.Invoke("OnDraw", [ 1 + "", 15 + "", "test", 15 + "" ])


LUA-Code:
Code: [AUSKLAPPEN]
function OnDraw(num1, num2, str1, num3)
   lua.PrintText('Dies ist ein Test, Parameter: num1 = ' .. num1)
   lua.PrintText(num1 .. ' + ' .. num2 .. ' = ' .. lua.Add(num1, num2))
end


Ausgabe:
Code: [AUSKLAPPEN]
Dies ist ein Test, Parameter: num1 = 1
1 + 15 = 16


Was ich verwirrend fand, war, dass ich ein Objekt brauchte, um meine BlitzMax-Funktionen in LUA nutzen zu können. Sprich: Ohne dieses Objekt ist der LUA-Interpreter sinnlos... Im Endeffekt kann ich mir dieses Verhalten aber so erklären: In BlitzMax gibt es keine Namensräume, also wich man auf Klassen (bzw. Objekte) aus. Alle Methoden innerhalb dieses Objekts sind vom LUA-Interpreter zugänglich, was ein lästiges Registrieren aller Funktionen erspart.
Was ich noch immer nicht ganz durchschaut habe ist, warum es eine TLuaClass und ein TLuaObject gibt. Was ist der Unterschied zwischen den beiden? Warum kann das nicht nur über TLuaClass laufen? Aber ich denke, das ist so ein Auswendig-Lern-Ding Very Happy

Jolinah

BeitragDi, Apr 18, 2017 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Meines Wissens:

Arrow LuaClass ist sowas wie eine Klasse/Type in Lua, oder einfach eine Repräsentation des Sourcecodes mit all den Funktionen.
Arrow LuaObject ist ein Objekt dieser Klasse/Type. Invoke ruft Methoden/Funktionen auf genau diesem Objekt auf.
Arrow Das heisst, es wäre auch möglich von der gleichen LuaClass mehrere LuaObjects zu instanziieren, wie in BMax selbst. Z.B. wenn jede Instanz andere Werte intern gespeichert hat usw..

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group