Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

11

20.03.2008, 18:16

std::map kenne ich ;)
ok, ich kann mir vorstellen was du meinst aber mein Problem liegt viel tiefer: ich muss diese Instanz des Raumschiffes erstmal in Lua reinkriegen. (diesmal verwende ich kein luna)Ich hab jetzt folgendes versucht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
struct Ship{
      int i;
      char a;
      int geti(){return i;}
      void seti(int y){i = y;}
  };
  Ship testS = {1, 'r'};
  lua_pushlightuserdata(L, (void*)&testS);
  lua_setglobal(L,"gameobject");
  LuaManager.RunScript("ControllStory.lua");

und Lua

Quellcode

1
2
3
4
5
print "Start Lua"
test = gameobject
print "have object"
test:seti(3)
print "EndLua"

nach "have object" bekomme ich keine Meldung mehr. Was habe ich falsch gemacht?

//Edit
Ich lasse für mein kleines Projekt Lua fallen, weil ich jetzt keine lust habe mich tagelang damit auseinanderzusetzen und das muss ich wohl bei der Komplexität und den Tücken dieser Sprache. Trotzdem interessiert es mich wie das jetzt geht also nehmr ich Antworten weiterhin entgegen

12

20.03.2008, 21:54

Zitat von »"neido"«

Zitat von »"chriss"«

Unter der Voraussetzung das du das Objekt wie im beispiel in C++ erzeugt hast und es in Lua 'nur' benutzt

was meinst du eigentlich mit 'nur'? was kann man noch mit einem Objekt machen außer es benutzen?
[/quote]
Naja man kann es erstellen. Klingt trivial, ist es aber nicht wenn man ein C++ Objekt in Lua erstellen möchte.

Wie das geht hatte mein letzter Link gezeigt.

Quellcode

1
test:seti(3)

kann nicht funktionieren. Wenn man C++ Funktionen in Lua registriert müssen die eine vorgegebenen Signatur haben. Um die Übergabeparameter in C++ auslesen zukönnen und rückgabewerte zu schreiben, muss man die endsprechenden Luafunktionen verwenden.

Aus diesem Grund gab es diese Wrapperklasse.

Also für jede Klasse in C++ muss es auch eine Wrapperklasse geben.


Das Gurke's Idee ist eigentlich sehr gut. Du könntest eine Basisklasse schreiben welche alle Attribute in eine Map speicher. Zum Lesen und Schrieben könntest du eine set und eine get Funktion schreiben.


Lua wird gerne verwendet weil is doch noch relativ simpel zu implementieren ist und vor allem weil Lua Skripte sehr schnell ausgeführt werden.

13

20.03.2008, 23:01

Da ich das Selbe wie du später auch mal machen will, hab ich mich mal schnell mit dem Beispiel ( von dem Link ) auseinandergesetzt und ein 'quick & dirty' hack produziert.

Das du Probleme hattest wundert mich nicht, aber wenn man mal alle Fehler aus dem Beispiel beseitigt hat, läuft es ganz gut :lol:

Ich hab mal mein VS 2005 Express Projekt in ein Zip gestopft und auf meinen Webspace gestellt. Den Link schick ich dir per PM.

Ich würde das auch temporär hier im Forum posten, aber solange ich nicht weiß wie das mit Copyright usw. aussieht, lass ich es mal.

Offtopic: Kann ich das Beispiel generell verbreiten wenn ich die MIT Lizenz dazupacke und darin vermerke woher man lua und das originalbeispiel beziehen kann?

Grüße

Werbeanzeige