Создание таблицы в элементах многомерных массивов и ее отрисовка

Я пытаюсь создать массив врагов и нарисовать его, но я продолжаю получать ошибки, если речь идет не о самом массиве, а о плохом аргументе в функции рисования: ожидал, получил ноль) Может ли кто-нибудь объяснить, что я делаю неправильно, это использование универсального для?

Код массива:

enemies = {}
for i=0,7 do
    enemies[i] = {}
    for j=0,2 do
        enemy = {}
        enemy.width = 40
        enemy.height = 20
        enemy.x = i * (enemy.width + 60) + 100
        enemy.y = enemy.height + 100
        table.insert(enemies[i],enemy)
    end

end
end

Функция рисования:

--enemy
love.graphics.setColor(0,255,255,255)
for i,v in ipairs(enemies) do
    love.graphics.rectangle("fill", v.x, v.y, v.width, v.height)
end

person Juris Dumburs    schedule 20.05.2013    source источник


Ответы (1)


enemies = {}
for i=1,8 do
    for j=1,3 do
        local enemy = {}
        enemy.width = 40
        enemy.height = 20
        enemy.x = i * (enemy.width + 60) + 100
        enemy.y = enemy.height + 100
        table.insert(enemies, enemy)
    end

end

Я не знаю, если это то, что вы имели в виду, хотя. В любом случае, причина, по которой вы получили nil, заключается в том, что в вашей версии ipairs возвращается другая таблица, содержащая три экземпляра enemy. Чтобы ваша версия работала, вам нужно добавить еще один ipairs:

for i,v in ipairs(enemies) do
    for _,e in ipairs(v) do
        love.graphics.rectangle("fill", e.x, e.y, e.width, e.height)
    end
end

Не забудьте использовать local для временных функций. И массивы Lua начинаются с 1, а не с 0.

person W.B.    schedule 20.05.2013
comment
Спасибо, это работает и с небольшими изменениями отображает 3 строки, единственная проблема в том, что мне не хватает одного столбца врагов. - person Juris Dumburs; 21.05.2013