Lua in Blitzmax

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Shaman

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

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

BeitragFr, Aug 12, 2011 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 12, 2011 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Sep 19, 2011 1:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Sep 19, 2011 5:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Very Happy

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 Very Happy

Noobody

BeitragMo, Sep 19, 2011 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ungetestet, aber sollte funktionieren BlitzMax: [AUSKLAPPEN]
Function LoadLuaFile(L:Byte Ptr, Path:String, Name:String)
luaL_loadfile(L, Path)
lua_setglobal(L, Name)
End Function

Function RunLuaFile(L:Byte Ptr, Name:String)
lua_getglobal(L, Name)
lua_pcall(L, 0, 0, 0)
End Function


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 Wink ).
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

BeitragMo, Sep 19, 2011 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group