JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=759ac69046824acb8269585047682082Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Lua 5
Gehe zu Seite 1, 2, 3, 4  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> News
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.04.2003, 14:36    Titel: Lua 5 Antworten mit Zitat

Heute wurde der Lua 5 Release built veröffentlicht. :D
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 24.04.2003, 12:54    Titel: Antworten mit Zitat

Hallo,

hast du dich mal so richtig damit beschäftigt? Kannst du Lua aus einem C/C++ Programm nutzen? Ich weiss, dass man den Header einbinden kann, aber dann... Interessant wird es ja erst, wenn ich Methoden von C++ Objekten aus Lua aufrufen kann...

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 24.04.2003, 13:32    Titel: Antworten mit Zitat

Jepp ich hab schon eine funktionierende Lua Konsole in C++ geschrieben mit der man von Lua aus auch Funktionen aufrufen kann. Wenn meine Engine soweit fertig ist(hab im Moment kaum Zeit zum programmieren. :() werd ich's auch dort einbauen. In dem Spiel werde ich Lua 4 verwenden und nur mit Funktionen arbeiten. Im Editor wird man dann Ereignissen Funktionen zuordnen können(z.B. Door1OnOpen()). Außerdem wird die Konsole auch auf Lua basieren.

Du kannst deine Klassen mit "toLua" nach Lua exportieren und die Methoden dann so aufrufen:
Code:

Foo:Bar(arg1, args2)


Ob das aber schon zu Lua 5 portiert wurde weiß ich nicht...
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 24.04.2003, 13:48    Titel: Antworten mit Zitat

main.cpp
Code:

#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <io.h>
#include <time.h>

extern "C"
{
#include <lua.h>
#include <lualib.h>
}

// Die folgenden Funktionen werden in Lua registriert

// Wird bei Syntaxfehlern aufgerufen
static int _ERRORMESSAGE(lua_State * L)
{
   char * error;

   cout << "Wie bitte!?!\n";
   return 1;
}

// Diese Funktion soll durch Stackmanipulation
// aufgerufen werden
static int callme(lua_State * L)
{
   cout << "Es hat geklappt!\n";
   return 0;
}

static int c_getline(lua_State * L)
{
   char buf[128];
   cin.getline(buf, 128);
   lua_pushstring(L, buf);
   return 1;
}

// Gibt die übergebenen Argumente aus und liefert
// 10 Integers zurück(0 - 9).
static int myfunc(lua_State * L)
{
   int i;

   cout << lua_gettop(L) << " Parameters:" << endl;

   for(i = 1; i <= lua_gettop(L); i++)
   {
      int type = lua_type(L, i);

      cout << "  ";
      
      if(type == LUA_TNUMBER)
         cout << lua_tonumber(L, i);
      else if(type == LUA_TSTRING)
         cout << lua_tostring(L, i);

      cout << endl;
   }
   
   for(i = 0; i < 10; i++)
      lua_pushnumber(L, i);

   return 10;
}

// Listet alle Dateien/Verzeichnisse im aktuellen Ordner auf
// (aus der MSDN kopiert)
static int dir(lua_State * L)
{
   std::string specs(lua_tostring(L, 1));
   long search;
   _finddata_t file_data;

   search = _findfirst(specs.c_str(), &file_data);

   printf( "\nRDO HID SYS ARC  FILE         DATE %25c SIZE\n", ' ' );
   printf( "\nRDO HID SYS ARC  FILE         DATE %25c SIZE\n", ' ' );
   printf( "--- --- --- ---  ----         ---- %25c ----\n", ' ' );
   printf( ( file_data.attrib & _A_RDONLY ) ? " Y  " : " N  " );
   printf( ( file_data.attrib & _A_SYSTEM ) ? " Y  " : " N  " );
   printf( ( file_data.attrib & _A_HIDDEN ) ? " Y  " : " N  " );
   printf( ( file_data.attrib & _A_ARCH )   ? " Y  " : " N  " );
   printf( " %-12s %.24s  %9ld\n", file_data.name, ctime( &( file_data.time_write ) ), file_data.size );

   while(_findnext(search, &file_data) == 0)
   {
      printf( ( file_data.attrib & _A_RDONLY ) ? " Y  " : " N  " );
      printf( ( file_data.attrib & _A_SYSTEM ) ? " Y  " : " N  " );
      printf( ( file_data.attrib & _A_HIDDEN ) ? " Y  " : " N  " );
      printf( ( file_data.attrib & _A_ARCH )   ? " Y  " : " N  " );
      printf( " %-12s %.24s  %9ld\n", file_data.name, ctime( &( file_data.time_write ) ), file_data.size );
   }

   _findclose(search);

   return 0;
}

void main()
{
   lua_State * L = lua_open(100); // <-- Stackgröße

   lua_baselibopen(L);
   lua_iolibopen(L);
   lua_strlibopen(L);
   lua_mathlibopen(L);
   lua_dblibopen(L);

   lua_register(L, "dir", dir);
   lua_register(L, "c_getline", c_getline);
   lua_register(L, "myfunc", myfunc);
   lua_register(L, "_ERRORMESSAGE", _ERRORMESSAGE);
   lua_register(L, "callme", callme);

   lua_dofile(L, "parsetable.lua");

   char buf[128];

   cout << "Lua Testconsole" << endl
       << "~~~~~~~~~~~~~~~" << endl
       << "Type 'exit' to quit" << endl;

   for(;;)
   {
      cout << "> ";
      cin.getline(buf, 128);   
      
      if(strcmp(buf, "exit"))
         lua_dostring(L, buf);
      else
         break;
   }

   lua_close(L);
}


parsetable.lua
Code:

function parsetable(tbl)
  if not(type(tbl) == "table") then
    print("[ERROR]Argument is not a table")
    return
  elseif type(tbl) == "nil" then
    print("[ERROR]Argument is nil")
    return
  end

  local length = getn(tbl)

  for i = 1, length do
    t = type(tbl[i])

    if t == "table" then
      print("\n~~~~~~~~~~~~");
      print("NESTED TABLE");

      parsetable(tbl[i])

      print("~~~~~~~~~~~~\n");
    elseif t == "function" then
      tbl[i]()
    else
      print(tbl[i])
    end
  end
end

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 24.04.2003, 14:04    Titel: Antworten mit Zitat

Sehr schön, vielen Dank !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 24.04.2003, 14:07    Titel: Antworten mit Zitat

War mir eine Ehre dem Großmeister zu helfen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 26.04.2003, 14:30    Titel: Antworten mit Zitat

Hmm, mich würde jetzt mal interessieren was du mit Lua machst oder bist du nur am Experimentieren?
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 26.04.2003, 16:50    Titel: Antworten mit Zitat

Erstmal nur ein paar Versuche, ich will aber auf längere Sicht ein paar Objekte gescripted bewegen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 04.08.2003, 09:42    Titel: Antworten mit Zitat

Weiteres interessantes Tutorial/Bericht:

http://gamestudies.cdis.org/~amatheson/LUA-Part01/Part01-section01.html
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 13.08.2003, 11:15    Titel: Antworten mit Zitat

Mittlerweile gibt es eine Alpha von toLua - sehr interessant....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 23.08.2003, 12:47    Titel: Antworten mit Zitat

Hast du dich mal mit Coroutinen und Threads beschäftigt? Ich krieg es nicht hin eine Coroutine von meinem C++ Programm aus zu resumen. =/
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 23.08.2003, 13:56    Titel: Antworten mit Zitat

Nein, bisher leider nicht. Ich habe aber schon eingeplant, in nächster Zeit was zu machen, wäre gut, wenn du es schon weisst. Twisted Evil
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 23.08.2003, 14:05    Titel: Antworten mit Zitat

Ich bin fleißig am arbeiten aber wieso funzt das nicht? =/

C++
Code:

#pragma comment(lib, "lua.lib")
#pragma comment(lib, "lualib.lib")

extern "C"
{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
}

#include <iostream>
#include <string>

using namespace std;

static int _wait(lua_State * L)
{
   return lua_yield(L, 0);
}

void main()
{
   bool running = true;

   lua_State * L = lua_open();
   lua_baselibopen(L);
   lua_register(L, "wait", _wait);

   lua_State * Thread = lua_newthread(L);
   lua_dofile(Thread, "test.txt");

   do
   {
      string input;
      cin >> input;

      lua_resume(Thread, 0);

      if(input == "exit")
         running = false;

   }while(running);

   lua_close(L);
}


Lua
Code:

while true do
print("Hallo")
wait()
end


[edit]
Ich erhalte den Fehler: "attempt to yield accross metamethod/C-call boundary"
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 23.08.2003, 15:29    Titel: Antworten mit Zitat

Nagut ich mach es jetzt doch mit Coroutinen, da funktioniert es... weiß jemand wie ich mit yield Parameter an das Hauptprogramm übergebe und wie ich diese vom Stack lese?
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 23.08.2003, 18:39    Titel: Antworten mit Zitat

Hat sich erledigt. Ich arbeite momentan an einem kleinen ASCII-Dungeon-Spiel. ;) Wenn ich fertig bin stelle ich das gesamte Projekt zur Verfügung. :)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> News Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3, 4  Weiter
Seite 1 von 4

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum