Lua Variablen ?

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

eleXity

ehemals "BlackProgrammer"

Betreff: Lua Variablen ?

BeitragFr, Mai 25, 2007 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
hi erstma,
ich hab nen kleines problem, unzwar habe ich
die benutzer einstellungen bei meinem game in einem
lua script ausgelagert, welches ich mit den standart (axe.luascript)
funktionen aufrufe, nun mein problem ist wie bekomme ich
die werte die ich den variablen zuweise in bmax rein ??
Lua-Script
Code: [AUSKLAPPEN]
-- Globale einstellungen
re_driver      = 0
re_width       = 1024
re_height    = 768
re_depth       = 32

also das ich zb so ne funktion aufrufe
lua_GetNumberOfVariable("re_width") gibts ja leider nicht
oder ich hab nix gefunden

mhh ich hoffe ihr versteh mich jetzt halbwegs und könnt mir
helfen wäre sehr dankbar dafür ^^
mfg
nVidia 570GTX | AMD Phenom II X6 | 8 GB RAM | 1TB | Win 7 Ultimate 64 SP1 | B3D, BMAX, BP, C#

Projekt : Worklog

BtbN

BeitragFr, Mai 25, 2007 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du ein Lua-Script nur für ein Paar einstellungen benutzen willst, würd ich dir eher zu einem einfachen Ini-Parser raten.

eleXity

ehemals "BlackProgrammer"

BeitragFr, Mai 25, 2007 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
mhh danke für die schnelle antwort, leider benutze ich
lua für viele sachen, es muss ja eine möglichkeit geben die
werte zu bekommen ?
nVidia 570GTX | AMD Phenom II X6 | 8 GB RAM | 1TB | Win 7 Ultimate 64 SP1 | B3D, BMAX, BP, C#

Projekt : Worklog
 

Dreamora

BeitragFr, Mai 25, 2007 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
jo gleich wie du alle anderen Werte von LUA bekommst, da LUA eigentlich nur einen Variablentyp hat ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

eleXity

ehemals "BlackProgrammer"

BeitragFr, Mai 25, 2007 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
du meinst also mit lua_CheckString usw... ?,
wüsste nicht wie das gehen sollte da man die funktionen
ja bei den in bmax geschriebenen funktionen benutzt
um die werte zu bekommen, oder ich hab gerade keine
idee wie ich das dann machen sollte ??
nVidia 570GTX | AMD Phenom II X6 | 8 GB RAM | 1TB | Win 7 Ultimate 64 SP1 | B3D, BMAX, BP, C#

Projekt : Worklog

TheShadow

Moderator

BeitragFr, Mai 25, 2007 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube sowas geht nicht... zumindest habe ich noch nicht gesehen wie das gehen soll

sowas brauche ich auch

ich will variablen nach lua-skript übergeben (das geht, indem man ein script ausführt) - aber dann zurückholen hab ich noch nix gefunden...

man kann aber eigene funktion aufrufen (so mache ich das jetzt):

myfunc ("varname", varvalue)
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

eleXity

ehemals "BlackProgrammer"

BeitragSa, Mai 26, 2007 11:31
Antworten mit Zitat
Benutzer-Profile anzeigen
hehe, diese methode ist mir ja auch bekannt, nur
ist es da ja umständlich für jede variable eine funktion
zu schreiben Rolling Eyes , mhh mal sehn dann nehme ich dafür doch
xml oder ini, danke für eure hilfe.
und ein frohes pfingstwochenende
mfg

Edit:// Ich mache das jetzt doch so wie du, mit funktionen
die die werte auslesen und dann in einem type abspeichern
wo ich sie dann raussuchen lassen kann, nach dem namen Wink

Ratchet

BeitragFr, Jun 01, 2007 7:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
    lua_getglobal(L, "width")
    lua_getglobal(L, "height")

    If (lua_isnumber(L, -2) = 0) Or (lua_isnumber(L, -1) = 0) then
      Print("Invalid configuration file!")
      End
    Else
      width   = lua_tonumber(L, -2)
      height  = lua_tonumber(L, -1)
    End If


Es ist auch möglich alle Variablen mit einer Schleife durchzuscrollen, deren Name, Type, Wert usw rauszubekommen. Steht alles im "Programmieren mit Lua" Buch. Wer viel mit Lua arbeitet sollte sich das besorgen, lohnt sich wirklich (Amazon.de: Programmieren mit Lua). Aber das habe ich jetzt leider nicht hier. Falls du den Code brauchst, sag bescheid, ich poste ihn heute Abend.

Zitat:
ich glaube sowas geht nicht

Alles was in Lua existiert und passiert kann man von außen manipulieren. Wirklich ALLES Smile
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro]

TheShadow

Moderator

BeitragFr, Jun 01, 2007 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
ehrlich gesagt verstehe ich das mit -1 oder -2 nicht...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

eleXity

ehemals "BlackProgrammer"

BeitragFr, Jun 01, 2007 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
mhh hab garnicht bemerkt das noch jmd
geantwortet hat Embarassed
also danke für den tip mit dem buch werde ich
mir bestimmt mal zu gemüte führen ^^, ja also
wenn du das vllt noch mit den -1, -2 erklären könntest,
ich versteh das auch nicht so richtig, das wäre echt super

mfg
nVidia 570GTX | AMD Phenom II X6 | 8 GB RAM | 1TB | Win 7 Ultimate 64 SP1 | B3D, BMAX, BP, C#

Projekt : Worklog

TheShadow

Moderator

BeitragFr, Jun 01, 2007 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Each call (lua_getglobal) pushes the corresponding global value onto the top of the stack, so that the width will be at index -2 and the height at index -1 (at the top).


hm... geht der Speicher dann nicht irgendwann aus?

andere Frage:
wie kann man in Lua Script-Fehler "ermitteln"
wenn ich jetzt z.B. luaL_dostring aufrufe.... irg. checke ich das nicht

ah hab gefunden:

Zitat:
It returns 0 if there are no errors or 1 in case of errors.
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Ratchet

BeitragSa, Jun 02, 2007 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
ehrlich gesagt verstehe ich das mit -1 oder -2 nicht...

Ganz einfach. Lua arbeitet mit eiem Stack. Das bedeutet alles was ich aufrufe landet im Stack und muss nacheinander abgearbeitet werden. Da ich in meinem Beispiel zwei mal lua_getglobal hintereinander aufrufe habe ich zwei Werte im Stack die dann den Index -1 und -2 haben. Der Lua Stack sieht dann so aus:

  • width
  • height

-1 ist halt der Unterste, -2 der vorletzte usw.

Ganz ehrlich ist das mit den Indexen auch echt komisch. Ist halt eine andere Art der Programmierung. Theoretisch kann man das auch so machen, ist allerdings nicht getestet.

Code: [AUSKLAPPEN]
    lua_getglobal(L, "width")
     If lua_isnumber(L, -1) = 1 then
      width   = lua_tonumber(L, -1)
    End If

    lua_getglobal(L, "height")
     If lua_isnumber(L, -1) = 1 then
      height   = lua_tonumber(L, -1)
    End If



Fehler anzeigen geht so:

Code: [AUSKLAPPEN]
Error = luaL_loadbuffer(Lua, Script, Script.Length, Filename)
If Error Then
   Print(String.FromCString(lua_tostring(Lua, -1)))
   lua_pop(Lua, -1)
End If


Ob du luaL_dostring oder luaL_loadbuffer aufrufst ist dabei egal.

TheShadow

Moderator

BeitragSa, Jun 02, 2007 9:38
Antworten mit Zitat
Benutzer-Profile anzeigen
aha... dann muß man wohl jedes mal auch lua_pop() verwenden - nachdem man die Variable abgefragt hat... das mit dem stack finde ich total sch... bei lua - ich meine wenn es optional wäre als Lib, dann OK - aber für alles nur solche stacks zu nutzen ist ganz schön heavy...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

eleXity

ehemals "BlackProgrammer"

BeitragSa, Jun 02, 2007 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
oha ... so geht das also, naja das finde ich aber auch
ziemlich nervig anstat man da gleich eine funktion in lua hat
die direkt den wert zurück gibt aber naja Very Happy
das wird so schon gehen
danke für die erläuterung
mfg
nVidia 570GTX | AMD Phenom II X6 | 8 GB RAM | 1TB | Win 7 Ultimate 64 SP1 | B3D, BMAX, BP, C#

Projekt : Worklog
 

#Reaper

Newsposter

BeitragSa, Jun 02, 2007 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr könnt euch doch auch aus den paar Zeilen eine eigene Funktion basteln. Also ungefähr so:

Code: [AUSKLAPPEN]

Function Lua_GetVarNum( l, varname$ )
   lua_getglobal(L, varname$)
   If lua_isnumber(L, -1) = 1 then Return lua_tonumber(L, -1)
End Function

(ungetestet)

Das würde das ja dann doch viel vereinfachen.
Ansonsten finde ich die Methode von Lua auch recht...blöd...
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
 

Dreamora

BeitragSa, Jun 02, 2007 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann nutz das MicroC oder Squirrel Modul wenn du mit LUA net umgehen kannst. Ist halt keine simple "Minisprache", BM ist nen Witz gegenüber LUA und Python und dergleichen was die Sprache und ihre Fähigkeiten betrifft.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

TheShadow

Moderator

BeitragSa, Jun 02, 2007 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
LUA ist die einzige Basic-Like Scriptsprache

Zitat:
Ist halt keine simple "Minisprache", BM ist nen Witz gegenüber LUA und Python


was ich bisher bei LUA gesehen habe, ist es einfacher als BM - bei Python sieht das vllt anders aus... aber Python ist mir schon zu fett...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

Dreamora

BeitragSa, Jun 02, 2007 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann kratzt dur derzeit an der Oberfläche von LUA.


Und stimmt nicht, ist nicht die einzige. Der Macher der MicroC / Squirrel Module hatte noch ein 3tes Modul, das vorgänger Modul von MicroC, das war Basic Syntax.

Binary Phoenix, bpscript
Leider steht es als einziges net zum download, denke jedoch auf anfrage würden sie es auch rausgeben, ich habs sonst auch noch drauf.

Obschon: MicroC ist effektiv nur pure C like syntax also kein gewurstel a la C++ und so und drum recht einfach zu nutzen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

TheShadow

Moderator

BeitragSa, Jun 02, 2007 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
MicroC scheint mir etwas zu sein was relativ unbekannt ist...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

Dreamora

BeitragSa, Jun 02, 2007 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist selbst entwickelt worden von ihnen.
Die weiterführung von BP Script.

Nur das Squirrel Modul ist eine sonst auch genutzte Sprache ...

Aber wenn man nicht LUA Power und Komplexität braucht für den eigenen Bedarf, ist MicroC eigentlich viel einfacher zu handhaben als das Riesenmonster LUA.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group