Lua in Blitzmax

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Blackside

Betreff: Lua in Blitzmax

BeitragDi, März 23, 2010 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 23, 2010 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

#Reaper

Newsposter

BeitragDi, März 23, 2010 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 23, 2010 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 23, 2010 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink (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 Confused

MfG DaysShadow
  • Zuletzt bearbeitet von DaysShadow am Mi, März 24, 2010 5:54, insgesamt einmal bearbeitet

coolo

BeitragDi, März 23, 2010 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

hamZta

Administrator

BeitragDi, März 23, 2010 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde dir das Modul Pub.Lua empfehlen, da drin hast du Lua in "Reinform".
Blog.

BladeRunner

Moderator

BeitragDi, März 23, 2010 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Aug 08, 2011 3:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Aug 08, 2011 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Aug 08, 2011 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Sad


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

BladeRunner

Moderator

BeitragMo, Aug 08, 2011 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 09, 2011 11:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 09, 2011 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Aug 09, 2011 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Musst du auch BlitzMax Funktionen in Lua registrieren?
Dann kannst du sie in Lua aufrufen

Skabus

BeitragDi, Aug 09, 2011 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Xeres

Moderator

BeitragDi, Aug 09, 2011 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Shaman

BeitragDi, Aug 09, 2011 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 11, 2011 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 11, 2011 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group