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

idontknow

unregistriert

21

09.07.2010, 14:01

Also...
Ich hatte auch einmal das Problem mit LUa , dass ich keine Funktionen von Klassen
registrieren konnte.
Das liegt , denke ich , daran das Lua eine C API ist.
Leider weiß ich nicht wie man das lösen kann.
Ich glaube aber die LUa++ Bibliothek hat da eine
Lösung gefunden.

Hier sind nocheinmal 3 Tutorials , dir dir helfen dich mit Lua besser
auseinanderzusetzen.
http://www.codeproject.com/KB/cpp/luaincpp.aspx
http://csl.sublevel3.org/lua/
http://www.gamedev.de/index.php?name=New…article&sid=177

MfG Stazer


Stichwort: Delegates.

Prinzipiell hast du eine Klasse mit einem (evtl einer Referenz!) Objekt und einem Methodenpointer die idR im CTor übergeben werden (in meinem Fall zumindest ^^). Die Klasse hat dann nochz eine Methode zum ausführen eines Methodenpointers.

Wüsste jetzt speziell für LUA leider keine Anwendung um ein konkreteres Beispiel zu nennen, hab ne Scriptsprache noch nie benötigt :X

CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

22

09.07.2010, 15:54

Danke für die Antworten

ich habe was interessantes gefunden

http://lua-users.org/wiki/SimplerCppBinding

nur leider finde ich dieses Luna nirgends. Weiß einer wo ich das herbekommen kann ?

noch was interessantes: http://lua-users.org/lists/lua-l/2001-02/msg00160.html

Edit: das scheint auch nicht das richtige zu sein http://sourceforge.net/projects/lunac/

lg

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »CodeBase« (09.07.2010, 16:03)


23

09.07.2010, 16:10

wäre es nicht einfach an der Zeit eine andere Scriptsprache auszuprobieren :D?
ansonsten http://lua-users.org/wiki/CppBindingWithLunar unten...

CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

24

09.07.2010, 19:54

Ne ich will das schaffen ;)

so habe es jetzt auch

Falls euch interessiert.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// LunaTest.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <lua.hpp>
#include <luna.h>
#include <iostream>

class Account {
  lua_Number m_balance;
public:
  static const char className[];
  static Luna<Account>::RegType methods[];

  Account(lua_State *L)     { m_balance = luaL_checknumber(L, 1); }
  int deposit (lua_State *L) 
  { 
      m_balance += luaL_checknumber(L, 1); 
      std::cout << luaL_checkstring(L, 2);
      return 0; 
  }
  int withdraw(lua_State *L) { m_balance -= luaL_checknumber(L, 1); return 0; }
  int balance (lua_State *L) { lua_pushnumber(L, m_balance); return 1; }
  ~Account() { printf("deleted Account (%p)\n", this); }
};

const char Account::className[] = "Account";

Luna<Account>::RegType Account::methods[] = {
  LUNAR_DECLARE_METHOD(Account, deposit),
  LUNAR_DECLARE_METHOD(Account, withdraw),
  LUNAR_DECLARE_METHOD(Account, balance),
  {0,0}
};

int main()
{
  lua_State *L = lua_open();

  luaL_openlibs(L);

  Luna<Account>::Register(L);

  luaL_dofile(L, "test.lua");

  std::cin.get();
  lua_gc(L, LUA_GCCOLLECT, 0);  // collected garbage
  lua_close(L);
  return 0;

}


Das ist das Lua Script.

Zitat

a = Account(100, 500)
print('a =', a)

wert1 = a:balance()
print(wert1)

a:deposit(50,"hallo welt")

hat geklappt bei mir :)

lg

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

25

09.07.2010, 20:57

Die eigentlichen Probleme fangen eh erst an, wenn du dein eigenes Anwendungsinterface in der Skriptsprache registrierst. Also nicht nur auf Beispielniveau arbeitest, sondern deine definierten Anforderungen umsetzen willst. Aber ich denke da spielt es keine Rolle welche Skriptsprache du nimmst. Jede hat ihre Tücken, mit denen man umzugehen lernen muss.

Thoran
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

Werbeanzeige