2011-12-25 3 views
2

Я использую Lua-скрипты в моей игре для iPhone, и она отлично работает!Lua Scripting Push Class Функция PN.click()

По чисто косметическим соображениям я хотел бы, чтобы мои функции в Lua были в формате PN.function(). В настоящее время они находятся в формате функции().

Я пытался регистрировать функцию как таковую:

lua_register(lua, "PN.Color", Color); 

Но это не позволит мне назвать его в скрипте Lua.

У кого-нибудь есть предложения?

Спасибо!

Ответил на мой собственный вопрос !:

lua_newtable(lua); 
int pn = lua_gettop(lua); 

lua_pushstring(lua, "Click"); 
lua_pushcfunction(lua, Click); 
lua_settable(lua, pn); 

lua_pushstring(lua, "Release"); 
lua_pushcfunction(lua, Release); 
lua_settable(lua, pn); 

lua_setglobal(lua, "PN"); 

ответ

1

Вы не можете использовать . в качестве имени функции в Lua. Если вы пытаетесь поместить все ваши функции Lua в глобальную таблицу с именем PN, тогда вы должны это сделать.

Помните: lua_register просто макрос:

#define lua_register(L,n,f) \ 
     (lua_pushcfunction(L, f), lua_setglobal(L, n)) 

Там нет ничего, что сказать, что вы не могли бы сделать это сами более конкретно.

Если у вас есть глобальная таблица PN, что вы хотите зарегистрировать функции Lua в, вы выполните следующие действия:

  1. Нажмите на PN таблицы в стек, используя lua_getfield(L, LUA_GLOBALSINDEX, "PN").
  2. Нажмите функцию, которую хотите зарегистрировать в стеке, с lua_pushcfunction(L, Color).
  3. Поместите функцию в нужное место в таблице, с lua_setfield(L, -2, "Color").
  4. Положите стол из стека с помощью lua_pop(L, 1).
+0

Спасибо! Мне удалось понять это всего несколько минут назад, прежде чем я прочитал ваш ответ, так что спасибо! – pantaryl

Смежные вопросы