Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Flash

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамическое создание элементов в стиле ActionScript 3.0
 
 автор: cheops   (05.02.2012 в 17:50)   письмо автору
 
 

При создании своих собственных элементов управления в стиле ActionScript 3.0, они оформляются в виде отдельного класса, пусть такой класс называется 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 элементов по 4 штуки в ряду нам достаточно организовать вложенный цикл, который будет их создавать
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]);
        }
      }
    }
  }
}
Более подробно о том, как строить проект можно почитать в разделе Примеры скриптов на Action Script 3, для которого я подготовил отдельную статью с подробными комментариями, где, что должно лежать. Если хотите, могу выложить сам проект, но у меня Flash CS5 (скорее всего для более старых версий Flash им воспользоваться не удастся).

  Ответить  
 
 автор: ADmexture   (05.02.2012 в 18:30)   письмо автору
 
   для: cheops   (05.02.2012 в 17:50)
 

А как мы обращаемся из самого *.fla файла к этим классам?

должно же быть что то вроде этого:

import gallery.photogallery;
import gallery.photo;

var newRaw:photo = new photo();


или можно проект выложить? Там нагляднее будет =)

  Ответить  
 
 автор: cheops   (05.02.2012 в 18:35)   письмо автору
 
   для: ADmexture   (05.02.2012 в 18:30)
 

А так и обращаетесь
import gallery.photogallery;
gallery.photogallery.методы_класса();
или можно создать объект при помощи new(), но смысл в том, чтобы во временной шкале кода было бы поменьше, а вот в отдельных AS-файлах бы его было бы побольше...

  Ответить  
 
 автор: ADmexture   (05.02.2012 в 20:54)   письмо автору
 
   для: cheops   (05.02.2012 в 18:35)
 

До полной кучи автоматизации можно наверно еще добавить задаваемое количество строк и столбцов:

for(var i:int = 0; i < Strok; i++){ 
        for(var j:int = 0; j < Stolb; 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]); 
        } 
      } 


интересно, как можно организовать постепенное увеличение id на 1, наподобие id++;?

  Ответить  
 
 автор: cheops   (05.02.2012 в 21:25)   письмо автору
 
   для: ADmexture   (05.02.2012 в 20:54)
 

Ну это конечно, только не забудьте вот эту строку исправить
id = i*4 + j;

>интересно, как можно организовать постепенное увеличение id на 1, наподобие id++;?
Конечно, id совершенно независим, более того, вы вместо id можете использовать два значения i и j, чтобы в любой момент точно знать с каким элементом в матрице работаете... этим собственные классы и хороши - вы можете делать с ними все, что угодно.

  Ответить  
 
 автор: ADmexture   (05.02.2012 в 21:36)   письмо автору
 
   для: cheops   (05.02.2012 в 21:25)
 

Спасибо, большое! Все удачно работает!

  Ответить  
Rambler's Top100
вверх

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