GamesQuest

Массив Array object

Array

Array object  или Массив — довольно полезный объект в создании игр. Он нужен для хранения больших объемов данных. По сути массив — это переменная хранящая множество значений. Т.е. такие переменные как Alterable Values или Alterable Strings хранят только одно значение.

Конечно, оно может меняться, но значение всегда одно.

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

Массив может хранить как числовые так строковые значения, но один массив не может одновременно хранить и числа и текст. Вы должны выбрать тип массива в свойствах объекта Array.

Добавить число или строку в объект Array

Что бы записать какую либо переменную в массив вы должны воспользоваться следующими действиями:

можно использовать до 3-х измерений (X, Y и Z). Эти измерения являются как бы индексами того или иного значения.

Для чисел

Примечание: эти три действия работают только для массива числового типа.

Например: нам нужно записать в массив несколько значений: 32, 48, 12, 33. Если мы используем только измерение X, то записать их мы можем под индексами: 1, 2, 3, 4. И если представить массив визуально, он будет выглядеть, примерно, так:

X
1 2 3 4
32 48 12 33

 

Если мы используем измерение XY, то можем вписать числа под индексами 1:1, 1:2, 2:1, 2:2. И массив будет выглядеть так:

X
Y 1 2
1 32 48
2 12 33

 

Если использовать измерение XYZ, то индексы для значения  могут быть, например, такие: 1:1:1; 1:1:2; 1:1:3; 1:1:4. А массив будет выглядеть как куб:

Для текста

Для записи в массив строковых переменных существуют точно такие же три действия как и для числовых.

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

Примечание

1) Количество элементов в каждом измерении не ограничено. Единственным ограничением является память компьютера либо мобильного устройства.

Трехмерный массив (XYZ) может быстро занять очень много места. Используйте его только если это действительно необходимо.

2) Вы можете указать любые индексы когда записываете что-либо в массив. Т.е. совсем необязательно задавать индексы по порядку как 1,2,3… можно и 5,10,15… НО

когда массив впервые записывает значение он создает ячейку под указанным индексом, и все ячейки по порядку до неё. Т.е. если вы записываете переменную в индекс 5, то массив создаст ячейки с индексами 1,2,3,4,5. При больших числах в индексе элемента это вызовет тормоза (особенно на мобильных устройствах). Что бы такого не происходило нужно заранее создавать массив в начале кадра — после создания ячеек массив работает с ними быстро и без тормозов. Ну, и старайтесь использовать ячейки по порядку.

3) Для индекса элемента нельзя использовать дробные и десятичные значения, а только целые числа, по этому

не используйте для определения индекса ячейки какие либо формулы, которые могут вернуть десятичное значение.

Получить значения из объекта Array

Что бы получить сохраненные в массив переменные используйте соответствующие выражения:

Для числового массива

Для строкового массива

Просто выберете выражение с количеством измерений, которые вы использовали для записи и укажите индексы.

Практическое применение объекта Array

Признаюсь, мне было сложно привести достойный пример, где массив был бы не заменим, но думаю, у меня получилось.

Задача

На сцене игры есть 5 островов. Если кликнуть ЛКМ по острову, над ним появляется снег.
Причем, можно создавать только один объект снега над одним островом. А если кликнуть ПКМ по острову, то снег над ним исчезает и потом снова можно создать снег.

При помощи Array эту задачу можно решить следующим образом:

Глобальная строковая переменная A (Global String A) содержит значение «снег»

Вернее, в ячейку массива записывается нейтральное значение «нет», т.к. у объекта Array не существует такого действия как удалить значение из ячейки. Единственное, что можно сделать это выбрать действие Clear Array, но оно отчищает весь массив.

Пока ничего сложного. И для решения подобной задачи не обязательно использовать массив, можно сделать это, например, при помощи flag. Но давайте немного усложним задачу!

Пример посложнее

Теперь помимо снега на острове можно создать ещё облачко и звезду. И также каждый из них должен быть только один у одного острова. Это уже меняет задачу из отношения «один ко многим» к отношению «множество к множеству».

Здесь каждый остров в массиве должен иметь не только собственный номер, но ещё и номера для объектов, которые к нему принадлежат.

Я создал три кнопки для выбора того, что мы собираемся создать на острове.

Глобальное значение А (Global Value A) является номером того или иного объекта.

И теперь событие создания объектов меняется следующим образом:

Что бы сработало событие Create object by name нужно дать объектам названия, соответствующие переменной Global String A:

Далее, вторая часть задачи: как убрать со всех островов только выбранный объект? Здесь нужно применить вложенные циклы по объектам For Each loop.

По клику ПКМ запускается цикл по всем элементам (снег, облако, звезда). Они объединены в группу.

Далее, когда этот цикл выполняется в переменную  Global Value B передается Номер текущего элемента

Номера элементов записаны в их переменную Номер и совпадают с номерами, которые устанавливаются в Global Value A при выборе элемента.

и запускается цикл по всем островам. Т.е. в одной петле группы элементов содержится перебор всех островов, и мы сравниваем каждый элемент со всеми островами. И таким образом определяем есть у какого-то острова данный элемент, и если он есть, то удаляем этот элемент и отчищаем ячейку массива для текущего острова.
 
Скачать исходный файл
 
Конечно, в принципе, и эту задачу можно решить используя обычные переменные вместо массива. Но, а если в игре не три элемента, а сто? Или процесс игры выстроен таким образом, что вы вообще не знаете сколько их будет? Тут никаких переменных не хватит. Активный объект ограничен 26-ю числовыми и 10-ю строковыми переменными. А что если вам надо больше? Тут Array object не заменим. Используйте его в своих играх и будет вам счастье)

Сохранение данных массива

Вы можете сделать сохранение массива для вашей игры с помощью действий:

Вам совсем не обязательно самому создавать файл для сохранения массива. Просто выполните действие Save array to file и Clickeam Fusion сам создаст указанный файл.

На практике это выглядит следующим образом:

Для экспорта мобильных приложений нужно добавить файл .arr в Data Elemets.


 
Скачать SaveArray.mfa

Но вернемся к нашему примеру

Ясно, что если загрузить сохраненный массив, то созданные ранее объекты (снег, облако и звезда) от этого не появятся. Их нужно вновь создать на основе данных из загруженного массива. В этом снова помогут петли FastLoop.

Запускаем цикл FastLoop под название «загрузить» столько раз, сколько у нас островов. Важно запускать петлю после загрузки массива.

Далее ничего сложного. Когда выполняется цикл мы сравниваем Номер острова с индексом текущей петли, что бы выбрать один из островов.

К индексу петли прибавляется единица, потому что нумерация петлей начинается с нуля, а номера островов с единицы.

И в этом событии создаем объект под именем, которое хранится в массиве под индексом петли (который совпадает с номером острова) и номером элемента. Т.к. у нас три элемента, то и событий выполнения петли тоже три. Меняется лишь индекс выборки массива по Y.

Теперь при загрузке массива будут так же загружаться объекты, которые были сохранены.
 

 
Скачать ArraySaveExample.mfa
 

На этом все. Надеюсь, Я не слишком вас утомил, и смог объяснить основную идею использования массива.

Если этот пост был полезным для тебя, будь другом, поставь лайк! А так же поставь звездный рейтинг и подписывайся на обновления, будет ещё много интересного.

Array object  или Массив - довольно полезный объект в создании игр. Он нужен для хранения больших объемов данных. По сути массив - это переменная хранящая множество значений. Т.е. такие переменные как Alterable Values или Alterable Strings хранят только одно значение. Конечно, оно может меняться, но значение всегда одно. В случае с массивом вы можете записывать несколько значений в одну переменную под разными индексами. И получить доступ к каждому значению индивидуально, используя действия и выражения в редакторе событий. Массив может хранить как числовые так строковые значения, но один массив не может одновременно хранить и числа и текст. Вы должны выбрать тип массива…
Массив Array object
Массив Array object
2016-02-07
100

10

Рейтинг: 5 ( 1 голосов)