30 декабря 2010 г.

Action Script 3. Урок 7. Массивы.

Привет всем, сегодня мы рассмотрим очередной урок, который будет посвящен массивам в action script 3 — создание, использование, примеры.

Как и в любом другом языке программирования, массивы представляют собой специальные хранилища переменных любого типа. Массив в action script — это таблица данных, в которую можно добавлять, из нее можно удалять и использовать элементы. Причем там могут храниться как и числовые переменные, так и объекты или символы.

Рассмотрим простой пример.

1. Создадим массив и заполним элементами.

var a:Array = new Array("1","2","3","4","5");


Мы создали переменную-массив с 5 элементами, порядковыми числами.

2. Выведем элементы массива в окно вывода.

trace(a[0],a[1],a[2],a[3],a[4]);


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

Теперь рассмотрим другой пример использования массивов.

1. Создадим массив для хранения будущих объектов.

var objects:Array = new Array();


2. Создадим контейнер для будущих объектов.

var container:Sprite = new Sprite();
addChild(container);


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

3. Создадим три объекта с разными именами через класс graphics на контейнере.

var box:Sprite = new Sprite();
box.graphics.beginFill(0x009900);
box.graphics.drawRect(50,50,50,50);
objects[0]=box;var circ:Sprite = new Sprite();
circ.graphics.beginFill(0x0000CC);
circ.graphics.drawCircle(150,50,5);
objects[1]=circ;var box1:Sprite = new Sprite();
box1.graphics.beginFill(0xFF0000);
box1.graphics.drawRoundRect(250,50,50,50,5,5);
objects[2]=box1;


4. Добавим элементы массива на сцену.

container.addChild(objects[0]);
container.addChild(objects[1]);
container.addChild(objects[2]);


5. Нарисуем какую-нибудь кнопочку на сцене и дадим ей имя, к примеру kill. При нажатии на нее будет удаляться рандомный элемент со сцены, причем заодно и из массива.



Создадим переменную, отвечающую за выбор случайного элемента в диапазоне от 0 до 2.

var count:int=Math.random()*objects.length;

Здесь мы использовали специальное свойство массива length — длина массива. С ее помощью мы охватим все элементы в массиве при удалении. Тип переменной — int, целое число.

6. Теперь добавим функцию, активирущуюся при нажатии на кнопку.

kill.addEventListener(MouseEvent.CLICK, killF);
function killF(e:MouseEvent):void {
container.removeChild(objects[count]);
objects.splice(count,1)
count=Math.random()*objects.length;
}

Смотрим: сначала удаляем элемент со сцены с помощью функции removeChild. Для этого указываем контейнер и сам элемент. Затем удаляем элемент из массива с помощью специальной функции splice — указываем место, откуда начнется удаление, и число удаляемых элементов (подробнее про общедоступные методы работы с массивом рассмотрим дальше). Затем обновляем переменную count.



Готово, при нажатии на кнопку, удаляются один за другим элементы.

Рассмотрим поподробнее различные методы.
С массивом в actionscript 3 можно выполнять всевозможные операции: добавление, удаление, сортировка, соединение элементов, причем все одними функциями, используя параметры.

1. Добавление. Для добавления элементов в массив есть метод push(). Для добавления элементов нужно указать их имена — элементы добавятся в конец массива. Чтобы добавить элемент в начало, используйте метод unshift().
2. Удаление. Для удаления существует методы shift(), который удаляет первый элемент массива и pop(), удаляющий последний.
3. concat() соединяет массивы друг с другом. К примеру a.concat(b). Массивы соединятся в последовательности ab.
4. reverse() переворачивает массив.
5. forEach() выполняет определенную функцию для каждого элемента массива.
6. splice() — уникальный метод. С его помощью можно как добавлять, так и удалять элементы в любом месте массива.
К примеру:
array.splice(1,3) — удалит 3 элемента начиная со второго элемента.
array.splice(1,0,"a","b","c") — добавит 3 строковых элемента после 2 элемента.

Попробуем создать небольшую игру используя вышеперечисленные методы.
Игра такая: пользователь вводит свои вопросы и ответы, и потом на них можно отвечать (другому человеку, к примеру). Мы будем создавать вопросы и ответы и заносить в массивы.

1. Создадим на первом кадре несколько объектов.
Два поля вводимых, две надписи статичные. И кнопка для подтверждения. Желательно статичные надписи преобразовать в растр (Ctrl+B). Имя поля для вопросов: ques, для ответов — ans. Кнопка потдверждения — submit.



2. На втором слое, на первом кадре пишем такой код.

stop();
var questions:Array = new Array();
var answers:Array = new Array();
var count:int=0;
var kol:int = 5;submit.addEventListener(MouseEvent.CLICK, addF);
function addF(e:MouseEvent):void {
questions.push(ques.text);
answers.push(ans.text);
ques.text='';
ans.text='';
count++;
if (count==kol) {
nextFrame();
vopros.text=questions[0];
count=0;
}
}



Создаем два массива, для вопросов и ответов, универсальную переменную подсчета, а также константу, отвечающую за количество вопросов (изначально 5).
Определяем функцию при нажатии на кнопку submit. Помещаем вопрос и ответ в соответствующие массивы, очищаем поля ввода, увеличиваем count. Также добавляем проверку на количество, если функция прошла kol раз, то переходим на следующий кадр, заполняем текстовое поле vopros (будет дальше) и переменную count.

3. На первом слое второго кадра создаем поле ввода с именем myans для ввода ответа, динамическое поле для вывода вопроса с именем vopros, и кнопку с именем nextB, примерно так:



На слое выше пишем следующий код:

count=0;
nextB.addEventListener(MouseEvent.CLICK, nextF);
function nextF(e:MouseEvent):void {
if (count==kol) {
nextFrame();
} else if (myans.text==answers[count]) {
count++;
trace('Да');
vopros.text=questions[count];
myans.text='';
} else {
trace('Неправильно');
}}



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

4. На 3 кадре пишем какие-нибудь поздравления и кнопку рестарта:



На слое выше пишем такой код:


restart.addEventListener(MouseEvent.CLICK, restartF);
function restartF(e:MouseEvent):void {
count=0;
answers.splice(0,kol);
questions.splice(0,kol);
gotoAndStop(1);
}


Имя кнопки — при ее нажатии обнуляем count, очищаем массивы (от начала до конца с помощью splice), перемещаемся на первый кадр.



Так, мы создали несложное приложение, попрактиковавшись с методами массивов. Исходник.

4 коммент.:

Vislouh комментирует...

вот это то что я давно искал. уроков по actionscript 3 на таком простом понятном языке и с такими закомментироваными примерами найти достаточно тяжело. хотелось бы побольше))

Cyber комментирует...

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

reerreins комментирует...

ui 578w s aa
Рассылка без спама на 8 тысяч 850 досок а так же на 46 тысяч фьрумов и о ваших сайтах и товарах мгновенно узнают сотни тысяч потенциальных клиентов.- Мы разошлем рекламу в течении 29 минут после оплаты.- Всего 244 рублей за рассылку. - Качественно.С гарантией.- Заключаем договора на раскрутку и вывод в ТОР сайтов.- Наш тел. 89266853242 ICQ 568113539 почта: rutop10@mail.ru . nk 482e l ow

Car Hire комментирует...

I think you will want to place a twitter button to your site. I just marked down the blog, although I must complete this by hand. Simply my suggestion.

Отправить комментарий