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

Tobiking

1x Rätselkönig

  • Private Nachricht senden

11

08.07.2010, 13:07

Im C++ Forum gibt es schicke Artikel darüber: http://www.c-plusplus.de/forum/viewtopic…-is-268247.html und http://www.c-plusplus.de/forum/viewtopic…-is-201764.html

Ich würde aber eigene Skriptsprachen nur für ganz spezielle Bereiche empfehlen. Ich habe z.B. gehört das bei einem Spiel eine eigene Skriptsprache für die KI entwickelt wurde, da es durch die speziellen und beschränkten Anforderungen einen Sinn gemacht hat. Für Allgemeines würde ich auf irgendeine existierende Skriptsprache wie Python, Lua etc. zurückgreifen, da diese sicherlich um einiges ausgereifter sind als das was man nebenbei zu einem Spiel entwickelt.

Was ich vor Kurzem mal getestet habe war das Einbinden von Mono in eine eigene Anwendung. Damit ist es theoretisch möglich "Scripte" in jeder Sprache zu schreiben, für die es einen .Net Compiler gibt. Einige Sprachen bringen auch einen eingebauten Compiler mit, so dass man direkt in der Anwendung Quellcode einlesen und compilieren kann. Der Editor der Unity Engine ist da ein schönes Beispiel für und laut den Entwicklern ist der Weg über Mono deutlich schneller als eine übliche Scriptsprache.

Mastermind

unregistriert

12

08.07.2010, 13:09

Christian:
Was er anscheinend zur Zeit macht ist während des Parsens C++ Anweisungen ausführen. Das kann yacc auch bzw. dafür ist es gemacht. In seinem Beispiel entspricht der C++ Code semantisch sogar dem was gerade geparst wurde. Einen rudimentären Interpreter bekommt man so relativ leicht hin. Nur wenn er wirklich was kompilieren will braucht er byte/maschinencode. Ich muss allerdings zugeben, dass ich DAS auch noch nie selbst gemacht habe.

13

08.07.2010, 13:43

ah achso darauf hast du dich (vor allem) bezogen :)...

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

14

08.07.2010, 14:45

Ich benutze Lua.
Schnell , klein und bietet trotzdem alles was man benötigt.

MfG Stazer

CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

15

08.07.2010, 15:25

Hallo

danke mal für das Brainstorming ^^

ich habe mir mal Lua angesehen und muss sagen das es mir schon sehr gut gefällt. Ich denke auch das ich Lua benutzen werde da es im Endeffekt genau das macht was ich möchte und ich muss das Rad ja nicht neu erfinden :).

Jetzt wollte ich mal das Lua ausprobieren bei mir nimmt er aber

C-/C++-Quelltext

1
lua_dofile( g_LuaInstance, "firstlua.lua" );


aber nicht. Weiß einer warum ??

Edit ich habe version 5.1.4.

lg

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CodeBase« (08.07.2010, 15:41)


CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

16

08.07.2010, 16:05

jetzt habe ich rausgefunden das es luaL_dofile gibt aber wenn ich das mache dann passiert gar nichts. Die Konsole bleibt schwarz.

was mach ich den da falsch ? der Code im Script ist der

print "HALLO";

17

08.07.2010, 19:52

Hm, du solltest vielleicht mal lua hochfahren. Ich mach das immer So:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main(int argc, char** argv)
{
    
    lua_State *L = lua_open();

    luaL_openlibs(L);

    // Die ganzen Funktionen registrieren
    // ... 

    int s = luaL_loadfile(L, "test.lua");
   
    // Ausführen
    s = lua_pcall(L, 0, LUA_MULTRET, 0);

    lua_close(L);

   return 0;
}


Und was willst du mit print ? Is das ne Funktion von dir ? Wenn ja: Hast du sie Registriert ?. Ansonsten, du musst Klammern benutzen.

CodeBase

Treue Seele

  • »CodeBase« ist der Autor dieses Themas

Beiträge: 98

Wohnort: Österreich -> Salzburg

Beruf: Datenbank Entwickler

  • Private Nachricht senden

18

09.07.2010, 07:52

Hallo,

ja hat schon geklapt ;) mein Problem war das ich das Working dir nicht gesetzt habe. Jetzt hat er die Datei nicht gefunden.

Jetzt wollte ich aber eine funktion einbinden das geht aber nicht. Ich weiß nicht warum. Wenn ich eine Funktion einbinde die in der Selben klasse ist dann gehts aber nehm ich eine andere her dann geht es nicht.

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
#include "stdafx.h"
#include "Test.h"

lua_State *g_LuaInstance = NICHTS;

int VonLua( lua_State* L )
{
  int iParameterAnzahl = lua_gettop( L );
  std::cout << "Aufgerufen mit " << iParameterAnzahl << " Parametern.\n";

  while ( iParameterAnzahl )
  {
    std::string strParam = "";
    if ( !lua_isnil( L, -iParameterAnzahl ) )
    {
    strParam = lua_tostring( L, -iParameterAnzahl );
    std::cout << "Parameter: " << strParam.c_str() << "\n";
    }
    --iParameterAnzahl;
  }
  lua_pop( L, lua_gettop( L ) );
  std::cout << "Von Lua aufgerufen\n";

  lua_pushnumber( L, 42 );

  return 1;
}

void init()
{
  // eine Lua-Instanz wird initialisiert
  g_LuaInstance = lua_open();
  

  if(g_LuaInstance == NICHTS)
  {
      std::cout << "ERROR!!";
  }

  luaopen_base( g_LuaInstance);
  lua_pushcfunction( g_LuaInstance, VonLua );
  lua_setglobal( g_LuaInstance, "MeineFunktion" );
  lua_pushcfunction( g_LuaInstance, Test::test(g_LuaInstance) );
  lua_setglobal( g_LuaInstance, "Test" );
 
  //std::cout << i;

  
}


Wenn ich das mache dann kommt der fehler

Zitat

error C2664: 'lua_pushcclosure' : cannot convert parameter 2 from 'int' to 'lua_CFunction'
was kann den das sein ? weiß da einer Hilfe ?

lg

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

19

09.07.2010, 13:37

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

20

09.07.2010, 13:41

ich habe lua nie eingesetzt und programmiere fast nie c++ aber musst du bei lua_pushcfunction nicht einen funktionszeiger übergeben?
Also ungefähr so:
lua_pushcfunction( g_LuaInstance, Test::test );
?

Werbeanzeige