Lua in Blitzmax
Übersicht

Shaman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich finde, MaxLua ist sehr einfach zu bedienen,
aber: mein problem dort war immer, dass es viel langsamer ist als direkt die Lua-Funktionen zu schreiben. (jedenfalls bei mir) |
||
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
mpmxyz hat Folgendes geschrieben: 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 Danke^^ Das hab ich mitlerweile auch rausgerfunden, ist eigtl. ne tolle Sache.Ich hab versucht die betreffende Stelle zu modifizieren, sodass auch Variablen in Lua modifizierbar sind, aber es klappt nicht.Die Stelle ist die Ereignisfunktion für NewIndex, hier: Code: [AUSKLAPPEN] Function NewIndex( L:Byte Ptr ) Local obj:Object=lua_unboxobject( L,1 ) Local typeId:TTypeId=TTypeId.ForObject( obj ) Local ident$=lua_tostring( L,2 ) Local mth:TMethod=typeId.FindMethod( ident ) If mth Throw "ERROR" EndIf Local fld:TField=typeId.FindField( ident ) If fld Select fld.TypeId() Case IntTypeId, ShortTypeId, ByteTypeId, LongTypeId fld.SetInt obj,lua_tointeger( L,3 ) Case FloatTypeId fld.SetFloat obj,lua_tonumber( L,3 ) Case DoubleTypeId fld.SetDouble obj,lua_tonumber( L,3 ) Case StringTypeId fld.SetString obj,lua_tostring( L,3 ) Default fld.Set obj,lua_unboxobject( L,3 ) End Select Return True EndIf End Function Ich hab nur kA wie ich das so umschreiben soll, dass es auch das Objekt selbst übergibt.Momentan sucht er ja nach irgendnem Identifier als Field. Aber primitive Datentypen haben ja keine derartigen Felder, weswegen nix passiert wenn man ein Objekt registiert, dass primitiv ist. Jemand eine Idee? btw.: Max-Lua verwendet ausschließlich Befehle aus der LuaCore, bis auch die NewIndex und Index-Funktionen sind das keine eigenen Funktionen. Wieso sollte MaxLua also signifikant langsamer sein? 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du möchtest auf globale BlitzMax-Variablen mit primitiven Datentypen in Lua zugreifen?
Dann würde ich ähnlich wie in MaxLua Metatables nutzen, aber über eine Map den Variablennamen mit einem Datentyp und einem dazugehörigen Variablenpointer verknüpfen. (Für konkretere Vorschläge müsste ich mich erst in MaxLua einarbeiten.) Sollen die Variablen global in Lua verfügbar sein? Das sollte meines Wissens nach über eine entsprechende Metatable in LUA_GLOBALSINDEX gehen. (Das ist nämlich auch 'nur' eine Table.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja ich will eigtl. gfolgendes machen:
In einer Datei globalvars.lua befinden sich alle Variablen die man in anderen Luaskripten verwenden will. Diese wird ausgelesen, sodass man man die Variablen auslesen und ändern kann in anderen Skripten. Wenn man das Spiel speichert werden die Variablen irgendwie gespeichert und beim Laden werden die globalen Variablen mit den aktuellen Werten befüllt. Im Grunde Variablen deklarieren ohne das Programm neu zu komplieren... Ich hab aber schon eine Idee wie das vllt. geht ohne dafür BlitzMax-Variablen/Arrays zu verwenden. Wäre für Hilfe und Ideen aber wie immer dankbar^^ 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 |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, hab folgendes Problem:
Wenn ich ein Lua-Skript per dofile lade und ausführe und danach ein anderes Lua-Skript über den selben LuaState lade und ausführe, kann ich komischerweise das erste Lua-File nicht erneut über dofile auslesen und ausführen. Kann mir jemand sagen wie ich das Problem behebe, ohne den LuaState zu reseten? Das bereitet mir gerade echt Kopfschmerzen.Ich hab bissher nur folgende Info finden können.luaL_dofile ist definiert als: (luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0)) Hier liegt auch dasd "Problem".Die Lua-Datei wird geladen und danach als Funktion ausgeführt.Kann ich mir die Datei irgendwie "merken" lassen um sie später erneut ausführen zu können. Wäre wirklich dankbar für 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 |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe mich die Tage auch ein wenig mit Lua beschäftigt, allerdings ist mir ein solcher fehler nie unterlaufen.
Hab mir sogar per FileTime() die datei neu einlesen lassen, falls sich diese unterschieden hat oO Hast du denn noch irgendwas mit lua im moment des neuladens laufen? Klappt es denn ohne die 2te Lua datei? Bis jetzt ist mir nur aufgefallen, das jede weitere Luadatei variablen etc überschreibt. Wenn ich 2 Lua dateien einbinde, in beiden ist zb eine funktion 'Print' - dann wird stetig die zuletzt eingelesene datei "überschreiben". Vielleicht gibt es zwischen deinen Luadateien eine art unkompatibilität, die erst auftritt, sobald die 2te datei 'ausgeführt' wurde - vielleicht ein bisschen mist gebaut? ![]() Aber: hoffentlich klärt sich das schnell, denn solche fakten sind immer gut zu wissen, gade, weil ich mich bald auch wieder auf lua berufen möchte/muss ![]() |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ungetestet, aber sollte funktionieren BlitzMax: [AUSKLAPPEN] Function LoadLuaFile(L:Byte Ptr, Path:String, Name:String) Im Prinzip lädt es die Datei einmal und schiebt den geladenen Lua-Chunk in eine Globale. Später kann der Inhalt dieser Globale beliebig oft auf den Stack geholt und ausgeführt werden. Name ist dabei der Name der Globalen, welchen du frei wählen kannst (pro Datei natürlich ein verschiedener Name, sonst kannst du sie nicht auseinanderhalten ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey danke, exakt so hab ichs nun gestern noch hinbekommen^^
Hab schon Angst es würde net so gehen wie ich wollte xD Hat funktioniert, 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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group