Сообщения на форуме пользователя Andrey (160 стр.)
Наложение таблицы(таблиц) Lua на структуру(массив структур) C++. | 30 окт. 2006 | 13:01 | #23 |
---|
Дмитрий Ясенев
ошибка:
Lua API: A runtime error, Description: scripts/1.lua:13: bad argument #1 to 'insert' (table expected, got nil)
ошибка:
Lua API: A runtime error, Description: scripts/1.lua:13: bad argument #1 to 'insert' (table expected, got nil)
cal3d и озвучка. | 30 окт. 2006 | 12:39 | #12 |
---|
>ага OpenSceneGraph у меня фрейм-ворк на нем основан и Кал3д через него щас юзаю.
ух-ты а ты сним разобрался? я думал что это не очень распространенная библиотека... у тебя какя версия? у меня 1.2
а как ты через нее используешь cal3d? это же либа скелетной анимации какое- это отношение имеет к графу сцены? или ты прсото модель как узел сцены подразумеваешь?
>а что за бв?
бы!!!! ;)
ух-ты а ты сним разобрался? я думал что это не очень распространенная библиотека... у тебя какя версия? у меня 1.2
а как ты через нее используешь cal3d? это же либа скелетной анимации какое- это отношение имеет к графу сцены? или ты прсото модель как узел сцены подразумеваешь?
>а что за бв?
бы!!!! ;)
Наложение таблицы(таблиц) Lua на структуру(массив структур) C++. | 30 окт. 2006 | 11:55 | #21 |
---|
Итак у меня появились еще вопросы.
Имеем массив игровой объект данные которого в классе C++(для простоты взял только 2 поля):
вот связка через luabind членов класса таблицей в Lua:
вот работающий скрипт:
Все хорошо работает, но вот никак не могу сделать это для массив объектов, т.е. в этом случае будет массив указателей на
GameObjectData
Делаю так(пишу только измененный код):
каким тогда должен быть скрипт, если это массив?
я попробовал сделать так:
Естественно ничего не работает и кидаеться исключение luabind::cast_field:
irst-chance exception at 0x7c81eb33 in LuaTestd.exe: Microsoft C++ exception: luabind::cast_failed @ 0x0012f720.
Unhandled exception at 0x7c81eb33 in LuaTestd.exe: Microsoft C++ exception: luabind::cast_failed @ 0x0012f720.
Как мне исправить скрипт или я что-то неправильно слделаю в C+ коде?
Имеем массив игровой объект данные которого в классе C++(для простоты взял только 2 поля):
class GameObjectData { public: GameObjectData() {}; bool isEmpty; int curState; };
luabind::module(L) [ luabind::class_<GameObjectData>("GameObjectData") .def(luabind::constructor<>()) .def_readwrite("isEmpty", &GameObjectData::isEmpty) .def_readwrite("curState", &GameObjectData::curState) ]; // объяляем указатель на игровые данные GameObjectData *gameData = NULL; luaManager.CallFunction(func); // вызываем функцию скрипта func == "Get" // получаем указатель, gameObjectData - это таблица хранящая данные класса GameObjectData objectData = luabind::object_cast<GameObjectData *>(luabind::globals(L)["gameObjectData"]); // далее просто в цикле повторно в качестве теста вызываем функцию обновляющую игровые данные: for(size_t j = 0; j < 30; ++j) { luaManager.CallFunction(func); // func == "Get" fprintf(stderr,"%s%d%s%s", "State: ", objectData->curState, " Empty: ", objectData->isEmpty ? "true" : "false\n"); } |
gameObjectData = nil; function Get() -- если вызываем первый раз то создаем таблицу if (gameObjectData == nil) then gameObjectData = GameObjectData(); end; -- тестовая реализация обновления игровых данных if (math.random(10, 100) > 50) then gameObjectData.Empty = true; gameObjectData.curState = math.random(10, 100); else gameObjectData.Empty = false; gameObjectData.curState = math.random(0, 9); end; end;
GameObjectData
Делаю так(пишу только измененный код):
// пока для 2 элементов GameObjectData *objectData[2]; ... for(size_t i = 0; i < sizeof(objectData) / sizeof(objectData[0]); ++i) { objectData[i] = luabind::object_cast<GameObjectData *>(luabind::globals(L)["gameObjectData"]); } |
я попробовал сделать так:
gameObjectData = {}; -- возможно тут будет nil, а не пустая таблица т.к. luabind ее создала. init = false; function Get() if (init == false) then gameObjectData = {}; -- мне кажеться что-тут не надо вставлять данные т.к. вроде это сделала luabind table.insert(gameObjectData, {isEmpty = false, curState = 1}); init = true; end; -- тестовая реализация обновления игровых данных if (math.random(10, 100) > 50) then gameObjectData[1].Empty = true; gameObjectData[1].curState = math.random(10, 100); gameObjectData[2].Empty = true; gameObjectData[2].curState = math.random(10, 100); else gameObjectData[1].Empty = false; gameObjectData[1].curState = math.random(0, 9); gameObjectData[2].Empty = true; gameObjectData[2].curState = math.random(10, 100); end; end; |
irst-chance exception at 0x7c81eb33 in LuaTestd.exe: Microsoft C++ exception: luabind::cast_failed @ 0x0012f720.
Unhandled exception at 0x7c81eb33 in LuaTestd.exe: Microsoft C++ exception: luabind::cast_failed @ 0x0012f720.
Как мне исправить скрипт или я что-то неправильно слделаю в C+ коде?
Требуется помощь с Lua | 27 окт. 2006 | 19:00 | #10 |
---|
>А есть где-ниудь доки на русском ??? Можно конечно и на английском, но чтобы более доходчиво для новичков, ибо мануалы на >сайте ужасно непонятные.
смотри книгу с сайта могу дать статтью рецепты Lua
и СРАЗУ ЖЕ БЕРИСЬ ЗА luabind !!!!
вот смотри меня убедили
http://www.gamedev.ru/code/forum/?id=56312
сегодня почти переделал все ядро игровой логики
смотри книгу с сайта могу дать статтью рецепты Lua
и СРАЗУ ЖЕ БЕРИСЬ ЗА luabind !!!!
вот смотри меня убедили
http://www.gamedev.ru/code/forum/?id=56312
сегодня почти переделал все ядро игровой логики
Требуется помощь с Lua | 27 окт. 2006 | 18:44 | #8 |
---|
SeeD
luaL_dostring() ?
luaL_dostring() ?
Наложение таблицы(таблиц) Lua на структуру(массив структур) C++. | 27 окт. 2006 | 14:40 | #18 |
---|
Дмитрий Ясенев
>а зачем так делать? в духе ООП было бы держать в каждом объекте экземпляр класса GameObjectData, и напрямую менять >данные прямо у объекта, который вам интересен.
да я так уже подумал что будет правильно :)
я думаю отставить все как есть и уже простетировал простешйи скрипт который просто меняет эти данные.
т.е. я так думаю быстродейстиве повыситься т.к. на стек будет класться только имя скриптовой функция, а раньше еще и 20 переменных.
>а зачем так делать? в духе ООП было бы держать в каждом объекте экземпляр класса GameObjectData, и напрямую менять >данные прямо у объекта, который вам интересен.
да я так уже подумал что будет правильно :)
я думаю отставить все как есть и уже простетировал простешйи скрипт который просто меняет эти данные.
т.е. я так думаю быстродейстиве повыситься т.к. на стек будет класться только имя скриптовой функция, а раньше еще и 20 переменных.
cal3d и озвучка. | 27 окт. 2006 | 14:31 | #10 |
---|
>И еще один вопрос: ты случайно cal3d не через OSG юзаешь ?
это что Open Scene Graph ???
да нет внедрил в движок да еще и перегнал все файлы в 1 двоичный что-бв не взяли :)
ну вот осталось еще можель перевернуть
это что Open Scene Graph ???
да нет внедрил в движок да еще и перегнал все файлы в 1 двоичный что-бв не взяли :)
ну вот осталось еще можель перевернуть
Требуется помощь с Lua | 27 окт. 2006 | 14:26 | #4 |
---|
Ошибка в исходном коде воды | 27 окт. 2006 | 14:12 | #2 |
---|
Osiris
попробую помочь стукни в аську...
попробую помочь стукни в аську...
Наложение таблицы(таблиц) Lua на структуру(массив структур) C++. | 27 окт. 2006 | 14:10 | #16 |
---|
IROV..
итак ошибка исправлена я передавал не ту перменную:
ну ты если не сложно все-таки пришли новый luabind
я тему закрывать не буду еще бедет вопросы.
итак ошибка исправлена я передавал не ту перменную:
// регистрируем Lua объект я так понимаю к нему можно обращаться как к таблице из Lua скриптов objectData = luabind::object_cast<GameObjectData *>(luabind::globals(L)["gameObjectData"]); |
я тему закрывать не буду еще бедет вопросы.
Наложение таблицы(таблиц) Lua на структуру(массив структур) C++. | 27 окт. 2006 | 12:25 | #15 |
---|
IROV..
>приведи весь код инициализации.
а тут только перед этом:
// открыть для luabind
luabind::open(luaState);
естественнно открываю через lua_open загружаю либы и т.д.
>и еще какой lua используеш?
Lua 5.1.1 Copyright (C) 1994-2006 Lua.org, PUC-Rio R. Ierusalimschy, L. H. de Figueiredo & W. Celes
>офиц версия 0.7 не работает с 5.1 имено оно и вызывает рунтайм ерор )
пожалуйста скинь поновей :(
проблемы с CVS будут
>приведи весь код инициализации.
а тут только перед этом:
// открыть для luabind
luabind::open(luaState);
естественнно открываю через lua_open загружаю либы и т.д.
>и еще какой lua используеш?
Lua 5.1.1 Copyright (C) 1994-2006 Lua.org, PUC-Rio R. Ierusalimschy, L. H. de Figueiredo & W. Celes
>офиц версия 0.7 не работает с 5.1 имено оно и вызывает рунтайм ерор )
пожалуйста скинь поновей :(
проблемы с CVS будут
Наложение таблицы(таблиц) Lua на структуру(массив структур) C++. | 27 окт. 2006 | 10:59 | #13 |
---|
Дмитрий Ясенев
итак я разобрался с ошибкой:
вот поправленный код:
но теперь в Debug выскакивет ошибка:
а в Release вообще все падает.
В процессе отладки по исходникам luabind и boost рузультатов не дало...
>во-вторых, не совсем понял, зачем вам общая переменная gameObjectData? вы же можете создавать её в скрипте и >использовать для каждого объекта свою, как и предполагалось (иначе зачем вы экспортите конструктор?).
ну а как тогда можно "привязать" указатели на данные этой структуры каждого объекта к таблице?
Еще вопрос вдогонку я так понимаю что в скрипте с учетом данного подхода мы просто можем обращаться к структуре что-то типа что-то такого:
?
итак я разобрался с ошибкой:
вот поправленный код:
... try { luabind::module(L) [ luabind::class_<GameObjectData>("GameObjectData") .def(luabind::constructor<>()) .def_readwrite("isEmpty", &GameObjectData::isEmpty) .def_readwrite("curState", &GameObjectData::curState) ]; luabind::globals(L)["gameObjectData"]=gameObjectData;//boost::ref(gameObjectData); } catch (const std::bad_exception& ex) { fprintf(stderr, "%s", ex.what()); } .... |
а в Release вообще все падает.
В процессе отладки по исходникам luabind и boost рузультатов не дало...
>во-вторых, не совсем понял, зачем вам общая переменная gameObjectData? вы же можете создавать её в скрипте и >использовать для каждого объекта свою, как и предполагалось (иначе зачем вы экспортите конструктор?).
ну а как тогда можно "привязать" указатели на данные этой структуры каждого объекта к таблице?
Еще вопрос вдогонку я так понимаю что в скрипте с учетом данного подхода мы просто можем обращаться к структуре что-то типа что-то такого:
... -- gameObjectData[] - таблица содержащая данные всех игровых объектов -- ID - индекс текущего объекта gameObjectData[ID].isEmpty = true; gameObjectData[ID].curState = 1; ...
Правка: 27 окт. 2006 11:13
Наложение таблицы(таблиц) Lua на структуру(массив структур) C++. | 26 окт. 2006 | 18:01 | #11 |
---|
Привет всем копаю luabind
столкнулся с ошибкой:
итак при компиляции возникает ошибка :(
LuaTest\test.cpp(460) : error C2039: 'get_globals' : is not a member of 'luabind'
LuaTest\test.cpp(460) : error C3861: 'get_globals': identifier not found, even with argument-dependent lookup
что я делаю не так???
столкнулся с ошибкой:
#include <luabind/luabind.hpp> .... class GameObjectData { public: GameObjectData() {}; bool isEmpty; int curState; }; ... GameObjectData gameObjectData; // определяем класс определяем конструктор и указатели на переменные luabind::module(L) [ luabind::class_<GameObjectData>("GameObjectData") .def(luabind::constructor<>()) .def_readwrite("isEmpty", &GameObjectData::isEmpty) .def_readwrite("curState", &GameObjectData::curState) ]; // регистрируем Lua объект я так понимаю к нему можно обращаться как к таблице из Lua скриптов luabind::get_globals(L)["gameObjectData"]=boost::ref(gameObjectData); |
LuaTest\test.cpp(460) : error C2039: 'get_globals' : is not a member of 'luabind'
LuaTest\test.cpp(460) : error C3861: 'get_globals': identifier not found, even with argument-dependent lookup
что я делаю не так???
Наложение таблицы(таблиц) Lua на структуру(массив структур) C++. | 25 окт. 2006 | 18:21 | #10 |
---|
Дмитрий Ясенев
угу спасибо за ссылку буду копасть ;)
угу спасибо за ссылку буду копасть ;)
Наложение таблицы(таблиц) Lua на структуру(массив структур) C++. | 25 окт. 2006 | 18:18 | #9 |
---|
Lion007
>зы : если надо подробностей - их есть у меня
может в аське??? ;)
>зы : если надо подробностей - их есть у меня
может в аське??? ;)