C ++ несколько состояний Lua - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу использовать один и тот же файл lua для нескольких игровых объектов

Файл lua:

function onUpdate()
    if Input.isKeyDown(Keys.d) then
        actor.x = actor.x + 0.1
    end

    if Input.isKeyDown(Keys.a) then
        actor.x = actor.x - 0.1
    end

    if Input.isKeyDown(Keys.w) then
        actor.y = actor.y + 0.1
    end

    if Input.isKeyDown(Keys.s) then
        actor.y = actor.y - 0.1
    end
end

Вопрос

ЭтоРекомендуется использовать Lua-состояние для каждого объекта или использовать одно и то же состояние для одного и того же файла и обновить глобальную переменную «actor» до того, как игровой объект вызовет сценарий (я хочу избегать использования таблиц, потому что мне придется использоватьимя таблицы перед переменными и вызовами функций) (я не знаю, есть ли какое-либо другое решение ... я новичок в lua)

1 Ответ

0 голосов
/ 06 февраля 2019

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

В противном случае обычнолучше и более управляемым, чтобы иметь единственное состояние Lua.


Если вам нужно сильное разделение между различными блоками логики, Lua предоставит вам:

сопрограммы

Если вам нужно иметь несколько блоков логики, которые вы хотите приостановить и возобновить позже, вы можете просто обернуть их в сопрограммы.Это также может быть легко сделано из C и позволяет вам делать большую часть того, что вы могли бы делать с различными состояниями Lua.

Среды

Хотя до и после Lua 5.2 они работают несколько иначе,основная идея та же: вы можете изменить то, какие «глобальные» переменные будут видны части вашего кода, даже используя метатаблицы для доступа к другим данным или генерировать их на лету.


С этими двумявы действительно не должны сильно нуждаться в отдельных состояниях Lua в игре.Одно исключение из этого правила, очевидно, будет многопоточностью;у вас не должно быть более одного потока с доступом к одному и тому же состоянию Lua, если вы не используете какой-то механизм блокировки, поэтому имеет смысл иметь по одному состоянию на поток и настроить для них способ связи изнутри C.

...