Lua/Love2D - Ошибка индекса строки динамических переменных

Недавно я решил попробовать Lua/Love2D. Я решил создать небольшую игру и работаю над способом хранения NPC и принадлежащих им данных. Принцип работы довольно прост: у каждого NPC есть слот памяти, где хранятся его идентификаторы. Чтобы помочь этому, я решил исследовать динамические переменные. Я их реализовал, но не работает. Я получаю сообщение об ошибке «попытка проиндексировать строковое значение». Код здесь, а ошибка в строке 13. Что я делаю неправильно?

npcmem01 = {visible="false", x=0, y=0, npctype="", weapon=0}
npcmem02 = {visible="false", x=0, y=0, npctype="", weapon=0}
npcmem03 = {visible="false", x=0, y=0, npctype="", weapon=0}
npcmem04 = {visible="false", x=0, y=0, npctype="", weapon=0}
local vars = {"npcmem"}

function SpawnNPC(npctype, x, y, slot)

    if npctype == "Civilian" then
        ("npcmem" .. slot).npctype = "Civilian"
    end

end

person almightybyron    schedule 13.04.2014    source источник


Ответы (1)


Чтобы сделать то, что вы хотите (имя динамической переменной), вам нужно использовать таблицу окружения _G:

_G["npcmem" .. slot].npctype = "Civilian"

однако вам действительно следует использовать простой массив:

npcs = {};

function SpawnNPC(npctype, x, y, slot)
    local tmp = {visible="false", x=0, y=0, npctype="", weapon=0}
    if npctype == "Civilian" then
        tmp.npctype = "Civilian"
        npcs[slot] = tmp
    end
end
person Petr Abdulin    schedule 13.04.2014