Игровой NPC мультиактный дизайн сценария lua - PullRequest
3 голосов
/ 26 января 2011

Мне нужно добавить сценарий NPC в мой проект игры. Сам проект разработан на языке C ++. Я буду использовать Luabind для связывания lua и c ++.

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

  1. Использование вида npcname_action для дифференциации каждого NPC.
    Это довольно сложно дать имя каждому другому NPC.
    Я все еще думаю, как реализовать это в моем проекте.
    Пример:

    HotelBellboy12_Click() { .. }  
    HotelBellboy12_TimerAction() { .. }
    
  2. Использование имени функции.
    Каждый NPC имеет свой собственный файл lua.
    Я думаю, чтобы загрузить скрипт в память и при необходимости будет загружен в luaState с помощью luaL_loadbuffer
    Пример:

    OnClick() { .. }
    OnTimerAction() { .. }
    

Какой из них лучше и почему?

Ответы [ 2 ]

3 голосов
/ 27 января 2011

Вы можете использовать другой дизайн.

Воспользуйтесь тем, что ключи и значения таблиц могут быть любого типа.

Допустим, npc - это таблица, содержащая все NPC. Его ключи - это имена NPC, а его значения - другая таблица. Эти другие ключи таблицы являются действиями, а его значения являются функцией для этих действий. Итак, если вы хотите, чтобы Боб прыгал при нажатии, и Алиса плакала через таймер, просто выполните:

npc.bob.click = function () jump() end
npc.alice.timer = function () cry() end
1 голос
/ 27 января 2011

Я делал что-то подобное раньше и использовал что-то похожее на ваш вариант №2.Когда карта загружается, я загружаю конфигурационный файл Lua, содержащий все данные NPC;среди них имя файла сценария, используемого для NPC.

Когда мне нужно загрузить NPC в игре, я компилирую файл Lua.NPC могут использовать «модель» типа NPC, чтобы диктовать большую часть общего поведения (например, типа Merchant или Commoner), которое указано в конфигурации NPC.Эти типы моделей предоставляют все основные функции, такие как предоставление окна торговли при нажатии.Конкретные NPC используют функции, такие как OnClick (), чтобы переопределить свою модель и предоставить пользовательские обработчики.

Для меня это сработало довольно хорошо, хотя в конечном итоге игра становится большим объемом скриптов.

...