Римеры скриптов на Action Script 3
Скачать 62.64 Kb.
|
Вернуться в примеры скриптов Динамическое создание элементов управления. С появлением ActionScript 3.0 происходит постепенный отказ от программирования на временной шкале и перемещение программного кода в отдельные файлы с расширением .as. Кратко напоминаем правила именования и расположения файлов: если используются именованные пакеты, то файл должен находиться в папке с таким же именем, т.е. если в файле используется пакет gallery, то этот файл должен находиться в одноименной папке Пакеты располагаются в папке с таким же именем package gallery { // ... // Файл с таким пакетом помещается в папку gallery // ... } Класс должен находиться в файл с таким же именем, т.е. класс photo должен находиться в файле photo.as Классы располагаются в файле с таким же именем package gallery { // ... // Файл с таким пакетом помещается в папку gallery // ... public class photo extends Sprite { // ... // Файл с таким классом должен находиться в файле gallery/photo.as // ... } } На рисунке ниже представлено то, чего мы хотим добиться, 12 динамически сформированных прямоугольников. Каждому из 12 объектов назначено событие CLICK и MOUSE_OVER, по которым в область отладки будут помещаться строки, сигнализирующие о возникновении событии и номер объекта, в котором событие произошло. В реальном классе можно реализовать более полезную функциональность. В проекте будет один пакет gallery и два класса gallery.photogallery – который обслуживает fla-файл gallery.fla и класс gallery.photo – который формирует один синий прямоугольник. Обратите внимание на компоновку проекта: AS-файлы находятся в папке gallery их имена совпадают с именами классов. В свойствах fla-файлы мы ссылаемся на класс gallery.photogallery, который будет главным классом проекта. Начнем с класса прямоугольника photo. Наследуем его от Sprite, передавая конструктору шесть параметров: id – уникальный идентифиатор, для которого в классе предусмотрен закрытая переменная, доступ к которой можно получить через открытый метод getID(). Два следующих параметра – координаты левого врехнего угла: x и y. Следующие два параметра: ширина width и высота height. Последний необязательный параметр задает цвет заливки, который устанавливается синим (0x0000FF). В конструкторе задаются два события MOUSE_OVER и CLICK, которые ничего не делают кроме отправки отладочной информации при помощи функции trace(). Класс photo package gallery { import flash.display.*; import flash.events.*; public class photo extends Sprite { // Номер элемента private var id:int = 0; // Конструктор public function photo( id:int, x:int, y:int, width:int, height:int, color:uint = 0x0000FF):void { // Уникальный номер элемента this.id = id; // Параметры прямоугольника // Рамка this.graphics.lineStyle(1); // Цвет this.graphics.beginFill(color); // Отрисовываем прямоугольник this.graphics.drawRect(x, y, width, height); // Вешаем обработчики событий this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver); this.addEventListener(MouseEvent.CLICK, onMouseClick); } // Возвращаем номер элемента public function getID():int{ return this.id; } // Обработчик MOUSE_OVER public function onMouseOver(e:MouseEvent):void { trace("Событие MOUSE_OVER ", this.getID()); } // Обработчик MOUSE_CLICK public function onMouseClick(e:MouseEvent):void { trace("Событие MOUSE_CLICK", this.getID()); } } } Теперь имеется возможность создать 12 объектов класса photo. Так как нам необходимо создать три ряда по 4 объекта, удобно воспользоваться вложенным циклом, вычисляя на каждой итерации координаты смещения объекта и его уникальный идентификтор id. Класс photogallery package gallery{ import flash.display.*; public class photogallery extends Sprite { // Конструктор public function photogallery():void{ // Высота var mHeight:int = 70; // Ширина var mWidth:int = 50; // В цикле создаем 4 x 3 объекта photo var item:Array = new Array(); // Уникальный идентификатор элемента var id:int = 0; // Координата X var mX:int = 0; // Координата Y var mY:int = 0; // Создаем 12 динамических элементов for(var i:int = 0; i < 4; i++){ for(var j:int = 0; j < 3; j++){ // Вычисляем уникальный идентификатор // от 0 до 11 id = i*4 + j; // Координата X mX = 10 + (10 + mWidth)*i; // Координата Y mY = 10 + (10 + mHeight)*j; // Создаем элемент item[id] = new photo(id, mX, mY, mWidth, mHeight); // Добавляем элемент на канву this.addChild(item[id]); } } } } } |