Массив в массиве в Lua - PullRequest
0 голосов
/ 11 января 2012

Если бы у меня был такой код в Lua, как бы я назвал это?

array = { this = { pic="hi.png", health=4 } , pos=20 }

Редактировать:

Скажем, например, у меня есть таблица врагов, подобная:

enemy = {}
enemy[1] = {pic="Ships/enem-01.png", hp=2}
enemy[2] = {pic="Ships/enem-02.png", hp=4}
enemy[3] = {pic="Ships/enem-03.png", hp=3}
enemy[4] = {pic="Ships/enem-04.png", hp=5}
enemy[5] = {pic="Ships/enem-05.png", hp=7}
enemy[6] = {pic="Ships/enem-06.png", hp=9}
enemy[7] = {pic="Ships/enem-07.png", hp=15} 

Затем я хочу создать таблицу из этих позиций,

level1 = {}
level1[1] = { ent = enemy[2], xpos= 20, ypos=20}

как бы я назвал pic, используя level1, или нет?

я бы изменил уровень1 на

level1[1] = {ent = 2, xpos=20, ypos=20}

, затем использовал бы

screen:draw(level[1].xpos, level[1].ypos, enemy[level[1].ent].pic) 

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Помните, что в Lua нет такой вещи, как «массив».Единственная существующая сложная структура данных - это «таблицы», которые строятся с использованием { }

Таблицы являются ассоциативными структурами, где все сохраненные данные могут быть проиндексированы с помощью ключей любого типа: чисел, строк или даже других таблиц.Единственное ограничение - тип nil.

Давайте рассмотрим пример, мы хотим построить одну таблицу с двумя ключами, одним номером и одной строкой:

example = { [1] = "numberkey", ["key"] = "stringkey" }

Обратите внимание, что вПример выше, конструкция таблицы отличается от вашего примера.Вы индексируете таблицу, используя [ ], как в следующем примере:

example[1]
example["key"]

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

example2 = { [1] = "numberkey", key = "stringkey" }

Содержимое этой таблицы такое же, как и раньше.Но ключ «ключ» был объявлен иначе.Мы можем сделать это с помощью строковых ключей: поместите их непосредственно в конструкторы таблиц.И чтобы проиндексировать их, мы можем использовать другой «синтаксический сахар»:

example2.key

Вернемся к вашему примеру, вы можете получить доступ к this, который является строковым ключом, используя:

array.this

Извините за мой английский, это не мой первый (и второй) язык.

2 голосов
/ 11 января 2012

Редактировать:

level1[1] = { ent = enemy[2], xpos= 20, ypos=20} 

как бы я назвал pic, используя level1, или нет?

Вам просто нужно сделать это:

level1[1].ent.pic -- "Ships/enem-02.png"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...