Доступ к объектам через Lua (iPhone SDK) - PullRequest
2 голосов
/ 22 августа 2010

Я пытаюсь понять, как работает Lua и как его можно интегрировать в проект, например, игру для iPhone на базе Obj-C. Я прекрасно интегрировал исходный код Lua и сумел использовать простой класс менеджера для преобразования вызовов функций, записанных в файле .lua, в методы Obj-C в проекте.

Я сейчас немного застрял; Я не уверен, как поступить с тем, для чего я хотел бы использовать Lua, и, учитывая, что он много гуглил, я не нашел статьи, которая заполнила бы небольшие пробелы в моем понимании. Я хотел бы использовать Lua для написания простой игровой логики для уровней в моей игре; например, я мог бы захотеть проверить, что игрок перешел на определенную часть уровня, затем, как только он это сделает, я проверю, поднимает ли он объект, затем, как только он бросает этот объект, я проверяю, попал ли он в другой объект и т. д. и т. д.

В сценарии я бы хотел что-то вроде этого:

if (objectsAreTouching(level.objects["objIndex1"], level.objects["objIndex2"]))
{
   //Move to next win-condition.
}

Так что я знаю, как получить доступ к функции, например, названной выше, objectsAreTouching, но не могу понять, как бы из файла .lua получить доступ к Словарю или Массиву из одного из Основные классы игры. Я предполагаю, что это должно быть возможно, я прав? Если так, как ты это делаешь? Если вы можете, тогда можете ли вы иметь метод в игровом движке, который возвращает BOOL-передачу, возвращающую значение скрипту, чтобы приведенный выше оператор if выполнял код внутри него?

Возможно, я задал этот вопрос плохо, поэтому, если мне нужно что-то прояснить, дайте мне знать. Кроме того, я знаю о проблемах, связанных с запретом интерпретируемого кода Apple, и меня это не касается.

Спасибо за любую помощь!

1 Ответ

5 голосов
/ 22 августа 2010

У вас есть (как минимум) три варианта:

  1. Создать словарь (используя Lua table) и массив (также используя Lua table) на стороне Lua, а не на стороне C ++; Вы можете сделать это в C ++ с помощью Lua C API или в скрипте Lua, который вы загружаете для создания игровой среды.

  2. Предоставить Lua функции доступа для чтения словаря и массива на основе C ++. Эти функции доступа аналогичны описанной вами функции objectsAreTouching, но на уровне методов доступа к данным. Обычно результаты, возвращаемые средствами доступа, будут lightuserdata.

  3. Используйте объекты Lua userdata для совместного использования состояния словаря и массива между Lua и C ++. В этом случае они будут объектами C ++, требующими доступа, как (2), но будут управляться Lua и могут иметь методы (metatable) и environment, связанные с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...