Главная страница О Web-студии Разработка сайтов Интернет-реклама CD-презентации 3D-графика Программное обеспечение
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создание сайтов. Авторы: Кузнецов М.В., Симдянов И.В. Головоломки на PHP для хакера (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры . Авторы: Кузнецов М.В., Симдянов И.В. PHP. Народные советы. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование: ступени карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Security & Cracking Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
Консультации от известных специалистов и авторов многих книг

Информационный портал
«SoftTime-INFO»


Примеры скриптов на Action Script 3

Вернуться в примеры скриптов

Динамическое создание элементов управления.


С появлением 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]);
        }
      }
    }
  }
}

Если работа ActionScript приложений не понятна, или вызывает вопросы, их можно задать на форуме Flash.

 
  Rambler's Top100 Яндекс.Метрика Яндекс цитирования