Для построения поля с образцом узора нам нужно во Flash создать отдельный файл. Для простоты, размер сцены должны быть теми же, что и основного файла, в нашем случае - 550 на 400 пикселей. Создайте два слой и назовите их соответственно "объекты" и "действия".

Для построения образца нам необходимо решить две задачи. Во-первых, сформировать массив, который будет основой для узора образца. Во-вторых, необходимо построить уменьшенное поле 8 на 8 квадратов, например желтого цвета, а поверх него расположить узор - голубые квадраты.

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

Значение элементов массива для конкретного узора
Рис. 12. Значение элементов массива для конкретного узора.

Именно таким образом я формировал узоры в Flash 4. Понятно, что такой способ утомителен, и в случае если узор более сложен, ошибок не избежать. Я предлагаю другой значительно более удобный способ, в первом ключевом кадре на слое "действия" наберите следующий код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
obr = new String();
obr = obr+"10000000";
obr = obr+"01000000";
obr = obr+"00100000";
obr = obr+"00010000";
obr = obr+"00001000";
obr = obr+"00000100";
obr = obr+"00000010";
obr = obr+"00000001";
// z - индекс символа строки obr
// т.к. индекс начинается с нулевого значения z=0
z = 0;
sample = new Array();
for (i=1; i<=8; i++) {
sample[i] = new Array();
for (j=1; j<=8; j++) {
sample[i][j] = obr.charAt(z);
z = z+1;
}
}

В первой строке мы создаем объектную строковую переменную obr. В строках с 2 по 9 мы заполняем значение этой переменной нулями и единицами. Причем всякий раз мы добавляем к предыдущему значению новую строку, представляющую код строки узора. Согласитесь, что внести изменения в такую "строку" значительно удобней. В результате такого действия, оно называется конкатенация - соединение текстовых строк, мы получаем одну строку, состоящую из 64 символов.

Нам осталось расщепить ее, и занести каждый символ в соответствующий элемент массива. Эту операцию выполняют строки с 12 по 19. Основную роль несет строка 17, в которой из строки obr выделяется последовательно каждый символ и присваивается элементу массива sample[i][j]. Здесь нужно сделать несколько замечаний.

Во-первых, Action Script, язык Flash MX еще в большей степени стал объектно-ориентированным языком программирования. В таких языках программист оперирует объектами. Каждый объект имеет набор свойств, которые можно изменять и набор методов, действий, которые можно выполнять над этим объектом. В данном случае объектом является строка, методом является .charAt(z)он выделяет из строки z-ый символ. Метод всегда пишется после объекта, над которым выполняется действие. Объект и метод разделяются точкой, такой способ записи называется точечной нотацией.
Во-вторых, в строке символы начинаются с нулевого индекса. Именно поэтому перед циклом переменная z принимает значение равное нулю.

Итак, у нас есть массив sample, в котором записан код образца узора. Нам осталось на основе него построить сам узор. Принцип построения аналогичен построению поля (пункт первый этой главы). На слое объекты создайте два квадрата желтого и голубого цвета со стороной 15 пикселей. Это будут символы, из которых будет строиться поле образца. Желтые квадрат превратите в символ типа "клип" и дайте ему имя fon, он будет дублирован многократно и из него будет построен фон. Голубой квадрат также конвертируйте в символ и дайте ему имя kv, он будет дублирован и построит узор находящийся поверх поля образца. Далее в первом же кадре добавьте следующий программный код.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
k = 1;
l = getProperty(kv, _height);
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
duplicateMovieClip("fon", "fon"+String(i)+String(j), k++);
setProperty("fon"+String(i)+String(j), _x, j*(l+2)+350);
setProperty("fon"+String(i)+String(j), _y, i*(l+2)+130);
}
}
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
duplicateMovieClip("kv", "kv"+String(i)+String(j), k++);
setProperty("kv"+String(i)+String(j), _x, j*(l+2)+350);
setProperty("kv"+String(i)+String(j), _y, i*(l+2)+130);
}
}
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
if (sample[i][j] == 1) {
setProperty("kv" add i add j, _visible, "0");
} else {
setProperty("kv" add i add j, _visible, "1");
}
}
}

Также, как и в случае с формированием игрового поля мы дублируем символы fon (первый набор циклов, строки с 3 по 9), kv (второй набор циклов, строки с 10 по 16) и устанавливаем видимость дубликатов символов kv в соответствием со значением массива sample (третий набор циклов, строки с 17 по 25). Мне хочется обратить ваше внимание на строчки кода, которые устанавливают координаты у дубликатов символа. В отличие от квадратов игрового поля, эти дубликаты смещены значительно сильнее, по _x они смещены на 350 пикселей вправо, а по _y на 130 пикселей вниз. Благодаря этому полученный узор не будет заслонять собой игровое поле.

Вы можете сохранить ваш файл под именем obr1.fla, опубликовать и протестировать. Если вы откроете файл obr1.swf, вы увидите квадратное поле узора смещенное в правую часть проекта.

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

name = "ступеньки";

Именно такое имя я дал первому узору. Вновь запустите ваш проект, возможно, вам захочется немного сместить текстовое поле, так, чтобы оно располагалось точно под полученным узором.
Теперь вы можете создавать новые узоры на основе полученного файла, просто измените содержимое первых строк кода, например, так:

name = "окно";
obr = new String();
obr = obr+"00000000";
obr = obr+"01111110";
obr = obr+"01000010";
obr = obr+"01000010";
obr = obr+"01000010";
obr = obr+"01000010";
obr = obr+"01111110";
obr = obr+"00000000";

и в новом образце вы увидите новый узор. Только не забывайте сохранять и опубликовывать все последующие узоры под однотипными именами obr1.fla, obr2.fla и т.д. Тогда у вас не возникнет сложностей при подключении новых узоров к вашей игре.

что должно получиться:
У вас должен получиться файл obr1.fla (рисунок - 13 a.) и obr1.swf. При запуске последнего у вас должен формироваться узор (рисунок - 13 b.).

Фрагмент экрана файла obr1.fla и запущенный файл obr1.swf
Рис. 13. Фрагмент экрана файла obr1.fla и запущенный файл obr1.swf.