[Lua i C++] Kilka pytań
Ostatnio zmodyfikowano 2010-10-10 08:35
programista12 Temat założony przez niniejszego użytkownika |
» 2010-10-07 07:27:27 A mógłbyś mi podać jakiś kod, bo samemu mi nie wychodzi? Napisałem też drugą funkcję wykonującą polecenie: void Console::DoString2( std::string str ) { if( luaL_loadbuffer( L, str.c_str(), std::strlen( str.c_str() ), str.c_str() ) || lua_pcall( L, 0, 0, 0 ) ) { std::string a = lua_tostring( L, - 1 ); this->PrintText( "P..." ); this->PrintText( a ); lua_pop( L, 1 ); } else { this->PrintText( "ERROR" ); } }
Ale jak wpisuję np. "x = 10" to w konsoli wypisuje mi "ERROR". Proszę o jakieś rady. |
|
michalp |
» 2010-10-07 17:50:54 Jeżeli zmienna jest globalna to musisz pobrać ją jak funkcję. Wtedy będziesz miał ją na stosie (czyli w ten sposób możesz wrzucić tę zmienną na stos, chyba że trzeba będzie wywołać lua_tonumber (lub lua_tointeger), zdjąć zmienną ze stosu a potem wrzucić jej wartość). |
|
programista12 Temat założony przez niniejszego użytkownika |
» 2010-10-09 12:28:59 Udało mi się wreszcie opanować przerzucanie funkcji C++ do Lua! Oto kod przykładowego programu: #include <iostream> #include <conio.h> #include <string>
extern "C" { #include "lua.h" #include "lauxlib.h" #include "lualib.h" }
lua_State * L; int pozycja = 0;
static int lua_PobierzPozycje( lua_State * L ) { lua_pushinteger( L, pozycja ); return 1; }
static int lua_Ruch( lua_State * L ) { while( pozycja != lua_tointeger( L, 1 ) ) { pozycja += 1; } return 0; }
static int lua_PrintText( lua_State * L ) { std::cout << lua_tostring( L, 1 ) << std::endl; return 0; }
void main() { L = lua_open(); luaL_openlibs( L ); lua_register( L, "PobierzPozycje", lua_PobierzPozycje ); lua_register( L, "PrintText", lua_PrintText ); lua_register( L, "Ruch", lua_Ruch ); bool exit = false; std::string cmd; while( !exit ) { std::cout << ">"; std::getline( std::cin, cmd ); if( cmd == "!exit" ) { exit = true; } else { luaL_dostring( L, cmd.c_str() ); std::cout << std::endl; } } lua_close( L ); return; }
I wszystko pięknie działa! Najlepsze jest to, że nie trzeba używać luabind. Rozwiązanie znalazłem w artykule z gamedev.pl (strona 8). Pokombinowałem i wyszło! Dziękuję wszystkim za pomoc! Jeżeli ktoś miałby jakieś pytania, to proszę pytać tutaj, chętnie odpowiem. |
|
DejaVu |
» 2010-10-09 19:25:23 Napisz krótkiego arta na temat tego :) |
|
programista12 Temat założony przez niniejszego użytkownika |
» 2010-10-10 08:35:35 Arta może i napiszę, ale najpierw muszę jeszcze ogarnąć luabind, bo nie chcę z każdej klasy, z której przenoszę funkcję robić singletona. |
|
1 « 2 » |