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

CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

1

27.06.2011, 09:39

LuaScript

Hallo Leute,

ich wollte gerade ein bisschen mehr Flexibilität in mein Programm bringen und habe mich dazu entschieden, Teile meines Spiels ins
LUA zu exportieren. Ich wollte mir zuerst meine eigene Scriptsprache machen aber habe mich dann doch dazu entschieden nur eine APPI
zur verfügung zu stellen.

So weit so gut. Meine Idee hinter der Sache war es 5 Grundfunktionen zu definieren die dann vom Spiel aufgerufen werden:
Diese könnten folgende sein:

OnRise() -- wird aufgerufen wenn das Script das erste man gestartet wird.
OnSleep() -- wird aufgerufen wenn das Script pausiert wird
OnPulse() -- wird bei jedem Durchlauf aufgerufen
OnAwake() -- wird aufgerufen wenn das Script weiter geht
OnDie() -- wird aufgerufen wenn das Script nicht mehr gebraucht wird.

So, ok dann habe ich mal versucht Lua und c++ zu verbinden klappt auch. Ich kann den "Focus" setzten und rufe die spezielen
functionen auf. Klappt alles wunderbar. Das einzige was ich jetzt habe ich das ich nur Static Functions aufrufen kann.

So da ich aber eigene Funktionen brauche die dann weiter Klassen aufrufen habe ich versucht das ganze über LuaBind zu lösen nur
bekomme ich das nicht. Entweder ich habe alles was ich brauche "includes" und "DLL" dann kommen irgendwelche Linker fehler oder
ich habe nur die includes und keine dll dazu. Ich bin schon am verzweifeln.

Kann mir da einer Helfen wie ich das machen kann ?


lg
christoph

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

27.06.2011, 09:59

Wenn ich das richtige verstehe, dann geht es im Prinzip um Luabind, korrekt? Gibt es davon verschiedene Varianten wie Binaries,Source,Enduser etc.? Musst du ggf Luabind selbst erstmal kompilieren um die lib/dll erstellen zu lassen? Gibt es kein Luabind Einstiegstutorial?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

DarioFrodo

Treue Seele

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

3

27.06.2011, 09:59

Ich kann dir da toLua++ empfehlen.
Das habe ich auch verwendet. Mit Hilfe von toLua++ kannst du Funktionen in deinem Code markieren und dann direkt im Lua Script aufrufen. Um die Verwaltung kümmert sich toLua++.
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

4

27.06.2011, 10:14

@Nox:

also ich wollte das Luabind benutzen ja nur ich finde dazu kein tutorial in dem beschrieben wird wie man das ganze einrichtet. Wie gesagt ich habe dann einfach mal rumversucht und es dann auch geschafft nur die Lib die da dabei war hatte funktionen nicht die im Tut aber aufgerufen wurden.

@DarioFrodo

Hmm das hört sich ja interessannt an. Ich habe mir das mal runtergeladen nur finde ich da keine Libs drinnen wie mache ich die den ? Habe sowas noch nie gemacht

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

27.06.2011, 10:47

Also ich kenn das Ding nicht aber der Beschreibung von DarioFrodo nach würde ich mal meinen es handelt sich bei toLua++ nicht um eine Library sondern um einen Codegenerator, also ein Tool das für dich den notwendigen C++ Code erzeugt um Lua einzubinden. Und es wird sicherlich wo ne Dokumentation/Anleitung dazu geben ;)

CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

6

27.06.2011, 10:58

Hmm achso.

das ist halt auch nicht das was ich brauche.

Also ich will zb eine Klasse machen die so ausschaut.

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class LUAFunctions
{
public:
    LUAFunctions();
    ~LUAFunctions();

    void REGISTER_GAMESTATE(lua_State *L);
    void CREATE_BUTTON(lua_State *L);
    
    ........

private:

};
;


so jetzt möchte ich aus dem Lua script herraus die Funktion REGISTER_GAMESTATE() aufrufen. wenn ich das alles static mache geht das nur dann ich auf keine memberpointer und varas zugreifen da nicht static. Andersrum lässt lua mich die Function nicht binden

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

27.06.2011, 11:16

Also ich hab Lua nie verwendet aber offenbar ist die zugehören API pures C und will daher auch nur einfache Funktionspointer. Ein Pointer auf eine nicht statische Memberfunktion ist was andres als ein Pointer auf eine normale Funktion. Um eine nicht statische Memberfunktion aufzurufen benötigst du immer eine entsprechende Instanz der Klasse. Ein schneller Blick in die Lua-Doku sagt mir dass es mit sog. "C Closures" eine Möglichkeit gibt Werte an eine Funktion anzuhängen die bei Lua registriert wird und auf die die Funktion dann immer Zugriff hat. Bau dir also statische Dummy-Funktionen die du bei Lua registrierst, häng deinen this Pointer über eine Closure an jede dieser Dummies an und dann brauchst du in der Dummy-Funktion nurmehr den this Pointer aus der Closure rausholen und kannst dann die entsprechende Memberfunktion aufrufen.

CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

8

27.06.2011, 11:53

Hallo,

so nun habe ich es geschafft. Danke dir für die Hilfe.

lg

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

9

27.06.2011, 12:23

Du könntest auch den C++ Wrapper LuaPlus verwenden...
http://luaplus.org/
Signaturen werden überbewertet

CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

10

27.06.2011, 12:53

Hi

ne ich benutze gar keinen Wrapper oder dergleichen für meine Funktionen. Einfach nur LUA und einen void pointer.

lg

Werbeanzeige

Ähnliche Themen