Как стать автором
Поиск
Написать публикацию
Обновить

Создаём и сохраняем ссылки на игровые объекты (сущности) в C++ и Lua

Время на прочтение9 мин
Количество просмотров5K
Всего голосов 10: ↑10 и ↓0+10
Комментарии4

Комментарии 4

Вы что то совсем перестали выпускать книги в электронном виде. Это направление закрыто?

PS

Будет ли напечатано последние издание книги от Big Nerd Ranch Программирование под Android?

  1. После НГ выпуск.

  2. Да, данная книга будет издана в конце 23 года.

  1. когда она уже устареет..... очень жаль

У меня есть pet проект, где тоже планируется создание сущностей C++ в Lua. (Это большой высокопроизводительный дашборд для мониторинга огромного количества датчиков и имеющий возможность расширения функционала посредством Lua и в будущем ещё и Python). Для объектов, которые создаются и уничтожаются в Lua все просто. Создаём в C++ класс, который планируем экспортировать в Lua. Пишем фабрику объектов этого класса в Lua - по сути создаём таблицу с именем класса и помещаем в неё метод new, который создаёт объект класса, создаёт в Lua таблицу, в которой в поле с именем класса и типом lightuserdata помещает указатель на созданный объект. Далее в неё помещаются методы класса (обёртки над методами, которые извлекают сначала указатель с вышеупомянутого поля, проверяют аргументы и вызывают соответствующие методы класса с передачей аргументов и возвращают значение в Lua, если нужно). После этого, за метаметодом _gc закрепляется функция удаления объекта. В этом случае жизнь объекта полностью контролируется скриптом. Причем, даже если потерять ссылку на объект в Lua, то сборщик мусора корректно удаляет объект из памяти, дёрнув метаметод _gc() И это прекрасно работает.

В статье предлагается назначать объектам идентификаторы и хранить их в каком-нибудь "реестре". В принципе, в моем проекте такой реестр есть, но вот как организовать обращение к объектам, которые могут создаваться и удаляться не только скриптом, но и по иным событиям, идей не приходило. В принципе, статья меня уже натолкнула на идею, за что автору спасибо.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий