Lua in Blitzmax
Übersicht BlitzMax, BlitzMax NG Allgemein
BlacksideBetreff: Lua in Blitzmax |
Di, März 23, 2010 18:33 Antworten mit Zitat |
|
---|---|---|
Hallo,
Hat jemand von euch Erfahrung zu LUA in Blitzmax bzw. kennt ein Tutorial? Ich habe rausgefunden das es einmal im pub.mod ein lua Modul gibt und im Englischen Forum habe ich oft von einen axe.mod Lua Modul gelesen und von LuGi. Aber ich habe leider keine Beispiele zur Verwendung von Lua in Blitzmax gefunden.... |
||
Hier sollte eigentlich eine Signatur stehen! |
DaysShadow |
Di, März 23, 2010 18:55 Antworten mit Zitat |
|
---|---|---|
Mittlerweile in BRL.MaxLUA zu finden und soweit ich weiß sind die Befehle an sich dieselben wie in anderen Sprachen, also sollten auch andere Tutorials gehen.
Unter Help - > Modules - > System - > LUA Scripting in der BlitzMax IDE gibts auch noch was, mit kleinem Beispiel. MfG DaysShadow |
||
Blessed is the mind too small for doubt |
#ReaperNewsposter |
Di, März 23, 2010 18:59 Antworten mit Zitat |
|
---|---|---|
https://www.blitzforum.de/foru...hp?t=19799
Sollte soweit noch gehen, bis auf die Imports eben. |
||
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 |
Blackside |
Di, März 23, 2010 19:06 Antworten mit Zitat |
|
---|---|---|
Nein Reaper... TLuaScriptEngine ist z.B. nicht vorhanden....
Danke DaysShadow. Nun frage ich mich jedoch wie ich ein Lua-Script ausführen kann, in dem Beispiel wird irgendwie Invoke genutzt, aber es scheint nur eine bestimme Funktion im Script auszuführen. Entweder ich verstehe das Prinzip nicht ganz oder das ganze Modul ist sehr Minimal gehalten? |
||
Hier sollte eigentlich eine Signatur stehen! |
DaysShadow |
Di, März 23, 2010 20:18 Antworten mit Zitat |
|
---|---|---|
Ohne mich jetzt mit Lua auszukennen scheint der String source im Beispiel doch einfach wie ein Luafile zu sein der eingelesen wurde.
Du kannst dann also den Code einer .lua Datei mit ReadLine oder per TTextStream mit LoadText in einen String laden und dann aus diesem eingeladenem lua-Code Funktionen aufrufen, was ja scheinbar mit instance.Invoke( "NameDerFunktion", ParameterDerAufzurufendenFunktion ) geschieht. Ansonsten verweist alles nur auf das offizielle Lua Reference Manual (im Index der Hilfe unter L findet man die restlichen Luafunktionen!) Edit: Ah, jetzt macht das auch Sinn, dass man die ganzen lua-Funktionen nicht unter System - LuaScripting findet sondern nur im Index wenn man nicht weiß, dass man das Pub.Lua Modul unter Other - LuaCore in der Hilfe findet...ich hoffe ich habe jetzt nicht mehr verwirrt als geholfen MfG DaysShadow |
||
- Zuletzt bearbeitet von DaysShadow am Mi, März 24, 2010 5:54, insgesamt einmal bearbeitet
coolo |
Di, März 23, 2010 21:11 Antworten mit Zitat |
|
---|---|---|
MaxLua würde ich nicht verwenden, nicht nur dass das sehr eingeschränkt ist (es ist nur möglich Objekte Lua zu übergeben), man hat nichteinmal (ohne Modifzierung) Zugriff auf die LuaState.
Man hat standardmäßig allerdings Zugriff auf die normale Lua API, mit der kann man alles machen was Lua von Haus aus kann. http://www.lua.org/manual/5.1/manual.html#3 hier sind bestimmt Beispiele. |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
hamZtaAdministrator |
Di, März 23, 2010 21:13 Antworten mit Zitat |
|
---|---|---|
Ich würde dir das Modul Pub.Lua empfehlen, da drin hast du Lua in "Reinform". | ||
Blog. |
BladeRunnerModerator |
Di, März 23, 2010 21:40 Antworten mit Zitat |
|
---|---|---|
Oder aber auch: LuaJIT von bb.com. Funktioniert einwandfrei und ist um den Faktor 5 schneller. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Skabus |
Mo, Aug 08, 2011 3:04 Antworten mit Zitat |
|
---|---|---|
Ich wollte jetzt keinen neuen Tread für das Thema aufmachen, daher meine Frage:
Was ist denn jetzt noch aktuell? Ich benötigte Lua um für ein kleines Point-And-Click ne Skriptengine zu implementieren, aber MaxLua ist dafür sichtlich ungeeignet... Was kann man nach aktuellem Stand für BlitzMax am besten nutzen? Danke für die Hilfe! MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
mpmxyz |
Mo, Aug 08, 2011 13:06 Antworten mit Zitat |
|
---|---|---|
Das schon erwähnte pub.lua bietet eine fast 1 zu 1-Übertragung der Lua-Bibliothek. (Es gibt ein paar Funktionen, die gewrappt wurden, um z.B. BlitzMax-Strings zurückzugeben.)
Die Möglichkeit einer Version mit JIT-Compiler gibt es immer noch. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Skabus |
Mo, Aug 08, 2011 21:13 Antworten mit Zitat |
|
---|---|---|
mpmxyz hat Folgendes geschrieben: Das schon erwähnte pub.lua bietet eine fast 1 zu 1-Übertragung der Lua-Bibliothek. (Es gibt ein paar Funktionen, die gewrappt wurden, um z.B. BlitzMax-Strings zurückzugeben.)
Die Möglichkeit einer Version mit JIT-Compiler gibt es immer noch. mfG mpmxyz Naja ich hatte mir das mal angeschaut, allerdings hab ich irgendwie das Gefühl das entweder etwas fehlt oder ich etwas nicht verstehe. Wie soll ich damit ein Luaskript ausführen lassen?Bei dem alten Axe-Modul ging das... Außerdem sieht das für mich so aus, als wenn ich nur einseitig kommunizieren könnte.Gibts dafür irgendwo eine etwas ausführlichere Literatur?Ich hab nichts gefunden... Und nach dem JIT-Compiler such ich jetzt schon seit heut morgen.Ich finde aber weder einen Downloadlink noch Dokumentationen.Hat jemand eine Idee? Danke für die Hilfe! MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
BladeRunnerModerator |
Mo, Aug 08, 2011 22:29 Antworten mit Zitat |
|
---|---|---|
LUAJIT sollte auf bb.com zu finden sein ( http://www.blitzmax.com/Commun...86#1022807 ), zumindest hatte ich es daher, und das pub.lua- modul ist eigentlich das axe.lua-teil, das wurde komplett integriert. Die Doku ist in der Tat sehr dürftig, wobei es mit HotDocs schon ein wenig besser aussieht.
Wenn Du nur Skripte laufen lassen willst ohne was einzubinden, schau dir lua_doFile und Lua_Dostring an. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Shaman |
Di, Aug 09, 2011 11:37 Antworten mit Zitat |
|
---|---|---|
Um lua-scripte laufen zu lassen, musst du dies schreiben:
Code: [AUSKLAPPEN] luaL_dofile(luaState,file) lua_getfield(luaState,LUA_GLOBALSINDEX,funcName) lua_pushinteger(luaState,counter) If (lua_pcall(luaState,1,3,0)<>0) Then Print "Error: "+lua_tostring(luaState,-1) Return -1 Else 'Print "Lua Successful" curParameter=lua_tostring(luaState,-1) curCommand=lua_tostring(luaState,-2).toLower() counter=lua_tointeger(luaState,-3) lua_pop(luaState,-1) lua_pop(luaState,-1) lua_pop(luaState,-1) EndIf luaState ist der globale LuaState es wird eine lua-Datei ausgeführt mit dem Namen in 'file', dann wird die Funktion mit Namen in 'funcName' geladen, dann ein Integer-Wert ('counter') als Parameter übergeben. Die Funktion wird mit lua_pcall aufgerufen. die 1 heißt: 1 Parameter die 3 heißt: 3 Rückgabewerte die 0 steht für die Fehlerbehandlungsroutine (normalfall immer 0) wenn 0 zurückgegeben wurde, wurde die Funktion erfolgreich ausgeführt. Dann werden die 3 Rückgabewerte ausgelesen mit lua_tostring und lua_tointeger. Beachte: Der letzte Rückgabewert hat den Index -1, der erste (bei 3 Rückgabewerten) -3 zum Schluss müssen die 3 Rückgabewerte vom Stack entfernt werden, sonnst kommt es zu eine Stacküberlauf. Ich hoffe, ich konnte dir helfen |
||
Skabus |
Di, Aug 09, 2011 12:55 Antworten mit Zitat |
|
---|---|---|
BladeRunner hat Folgendes geschrieben: LUAJIT sollte auf bb.com zu finden sein ( http://www.blitzmax.com/Commun...86#1022807 ), zumindest hatte ich es daher, und das pub.lua- modul ist eigentlich das axe.lua-teil, das wurde komplett integriert. Die Doku ist in der Tat sehr dürftig, wobei es mit HotDocs schon ein wenig besser aussieht.
Also der dortige Link ist down, hast du oder hat jemand das noch zufällig und kann das mal hochladen? @Shaman: ja langsam wirds klarer, danke^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
Shaman |
Di, Aug 09, 2011 13:09 Antworten mit Zitat |
|
---|---|---|
Musst du auch BlitzMax Funktionen in Lua registrieren?
Dann kannst du sie in Lua aufrufen |
||
Skabus |
Di, Aug 09, 2011 13:30 Antworten mit Zitat |
|
---|---|---|
Ja ich brauch im Grunde 3 Funktionen: Variablen definieren, so dass sie in BlitzMax verfügbar sind, Bmax-Funktionen in Lua aufrufen, Zugriff auf Type-Objekte.
Ersteres ist relativ klar, nur hab ich noch kA wie ich das verwalten soll, aber das is ja kein Lua-Problem^^ Das zweite ist auch relativ klar, gibt ja genug Doku für... Nur 3. ist schwierig.Wie soll ich von Lua aus auf Types zugreifen?Ich möchte ja für mein Point-and-Click dynamische Veränderungen am Objekt machen, Hide() z.B. oder solche sachen. Jemand eine Idee wie man auf Types in Lua zugreifen kann? MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
XeresModerator |
Di, Aug 09, 2011 15:07 Antworten mit Zitat |
|
---|---|---|
Bei pub.lua/BRL.MaxLua geht das über LuaRegisterObject (hab' im Worklog mal damit rumgespielt).
Es gibt auch noch LuGI, damit habe ich aber noch nicht groß was gemacht. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Shaman |
Di, Aug 09, 2011 19:49 Antworten mit Zitat |
|
---|---|---|
Ich mach das mit den Types immer so,
dass ich ein Modul pro Type-Art habe. Dieses entählt Funktionen zur manipulation der Objekte Die einzelnen Objekte dann werden über IDs angesprochen. Beispiel: BMax: Code: [AUSKLAPPEN] Type TTest Global map:TMap Field var:int Method func1(a:int) var=a End Method Function Lua_Func1(L:Byte Ptr) 'Ohne Fehlerüberprüfung local var=lua_tointeger(L,-1) local name$=lua_tostring(L,-2) local obj:TTest=TTest(map.ValueForKey(name)) obj.func1(var) End function End Type TTest.map=CreateMap() TTest.map.Insert("obj1",new TTest) lua_register(LuaState,TTest.Lua_Func1,"TTest_Func1" Lua-Code Code: [AUSKLAPPEN] TTest_Func1('obj1',5) Durch eine ObjektID und Umweg über Funktion kann man auf Methoden von Types zugreifen. |
||
Skabus |
Do, Aug 11, 2011 15:36 Antworten mit Zitat |
|
---|---|---|
Danke für deine Hilfe Shaman, ich komm langsam klar.Hat mir sehr geholfen^^
Mir ist aber bei der RegisterObject-Funktion von BlitzMax was sehr kurioses aufgefallen. Wenn ich einen Type selbst definiere: Code: [AUSKLAPPEN] Type meinType Field meineVariable End Type Kann ich einen abgeleitete Instanz z.B. Local neuerType:meinType = new meinType mit RegisterObject in Lua bekanntmachen.Wenn ich in Lua jetzt schreibe: neuerType.meineVariable = 5 Dann ändert sich der Wert der Variable tatsächlich auch im Programm selbst.Ich kann also in Lua durchaus Type-Variablen bearbeiten. Wenn ich jetzt versuche eine einfache Int-Variable zu registieren passiert nichts.Der Wert der Variable ändert sich nicht.Hat das einen technischen Grund? Ich würde gerne Int-Variablen und Arrayeinträge mit Namen verknüpfen und in Lua ändern aber das geht wie gesagt nicht. Hat jemand eine Idee? Danke für die Hilfe^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
mpmxyz |
Do, Aug 11, 2011 20:03 Antworten mit Zitat |
|
---|---|---|
MaxLua nutzt Metatables. Das sind Lua-Tables, deren Methoden das Verhalten von anderen Lua-Objekten verändern können. (So gibt es zum Beispiel die Möglichkeit, darüber Operatoren zu überladen.) MaxLua modifiziert hiermit die Zugriffe auf Indizes - ".blah"-Ausdrücke sind in Wirklichkeit Table-Zugriffe mit String-Indizes - , sodass Methoden und Variablen in Lua ansprechbar sind.
In der Lua-Dokumentation solltest du dazu nähere Informationen finden. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Übersicht BlitzMax, BlitzMax NG Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group