"Слайд-шоу" во флеш ? @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 4 ] 
*   Список форумов / Технологии изображения / Flash » ответить » создать топик « | »
Автор Сообщение
POLL Муж.
соучастник
17
Сообщения: 632
Зарегистрирован: 30.10.03
Откуда: Ростов-на-Дону
Заголовок сообщения: "Слайд-шоу" во флеш ?
Сообщение Добавлено: 18 Апрель 2006, 09:18:10 
Нужно посредством ActionScript 2, реализовать метод загрузки нескольких фоток и поочередного их показа. Т.е. сперва загрузить и показать фото1, затем через 5 секунд показать фото2 и т.д. по циклу.

Я решил реализовать это через классы.
За основу взял пример Мука с ImageViewer

#####ImageViewer.as######
Код:
class ImageViewer {
  private var container_mc:MovieClip;
  private var target_mc:MovieClip;

  private var containerDepth:Number; 
  private static var imageDepth:Number = 0;
  private static var maskDepth:Number = 1;
  private static var borderDepth:Number = 2;
  private static var statusDepth:Number = 3;

  private var borderThickness:Number;
  private var borderColor:Number;
  private var imageLoader:MovieClipLoader;

  public function ImageViewer (target:MovieClip,
                               depth:Number,
                               x:Number,
                               y:Number,
                               w:Number,
                               h:Number,
                               borderThickness:Number,
                               borderColor:Number) {
    target_mc = target;
    containerDepth = depth;
    this.borderThickness = borderThickness;
    this.borderColor = borderColor;
    imageLoader = new MovieClipLoader();

    imageLoader.addListener(this);

    buildViewer(x, y, w, h);
  }

  private function buildViewer (x:Number,
                                y:Number,
                                w:Number,
                                h:Number):Void {
      createMainContainer(x, y);
      createImageClip();
      createImageClipMask(w, h);
      createBorder(w, h);
  }

  private function createMainContainer (x:Number, y:Number):Void {
    container_mc = target_mc.createEmptyMovieClip("container_mc" + containerDepth, containerDepth);
    container_mc._x = x;
    container_mc._y = y;
  }

  private function createImageClip ():Void {
    container_mc.createEmptyMovieClip("image_mc", imageDepth);
  }

  private function createImageClipMask (w:Number,
                                        h:Number):Void {
    if (!(w > 0 && h > 0)) {
      return;
    }

    container_mc.createEmptyMovieClip("mask_mc", maskDepth);

    container_mc.mask_mc.moveTo(0, 0);
    container_mc.mask_mc.beginFill(0x0000FF);  // Use blue for debugging.
    container_mc.mask_mc.lineTo(w, 0);
    container_mc.mask_mc.lineTo(w, h);
    container_mc.mask_mc.lineTo(0, h);
    container_mc.mask_mc.lineTo(0, 0);
    container_mc.mask_mc.endFill();

    container_mc.mask_mc._visible = false;
  }

  private function createBorder (w:Number,
                                 h:Number):Void {
    // Only create the border if a valid width and height are specified.
    if (!(w > 0 && h > 0)) {
      return;
    }
    container_mc.createEmptyMovieClip("border_mc", borderDepth);

    container_mc.border_mc.lineStyle(borderThickness, borderColor);
    container_mc.border_mc.moveTo(0, 0);
    container_mc.border_mc.lineTo(w, 0);
    container_mc.border_mc.lineTo(w, h);
    container_mc.border_mc.lineTo(0, h);
    container_mc.border_mc.lineTo(0, 0);
  }

  public function loadImage (URL:String):Void {
    imageLoader.loadClip(URL, container_mc.image_mc);

    container_mc.createTextField("loadStatus_txt", statusDepth, 0, 0, 0, 0);
    container_mc.loadStatus_txt.background = true;
    container_mc.loadStatus_txt.border = true;
    container_mc.loadStatus_txt.setNewTextFormat(new TextFormat(
                                                 "Arial, Helvetica, _sans",
                                                 10, borderColor, false,
                                                 false, false, null, null,
                                                 "right"));
    container_mc.loadStatus_txt.autoSize = "left";

    container_mc.loadStatus_txt._y = 3;
    container_mc.loadStatus_txt._x = 3;
    container_mc.loadStatus_txt.text = "LOADING";
  }

  public function onLoadProgress (target:MovieClip,
                                  bytesLoaded:Number,
                                  bytesTotal:Number):Void {
    container_mc.loadStatus_txt.text = "LOADING: "
        + Math.floor(bytesLoaded / 1024)
        + "/" + Math.floor(bytesTotal / 1024) + " KB";
  }

  public function onLoadInit (target:MovieClip):Void {
    container_mc.loadStatus_txt.removeTextField();
    container_mc.image_mc.setMask(container_mc.mask_mc);
  }

  public function onLoadError (target:MovieClip, errorCode:String):Void {
    if (errorCode == "URLNotFound") {
      container_mc.loadStatus_txt.text = "ERROR: File not found.";
    } else if (errorCode == "LoadNeverCompleted") {
      container_mc.loadStatus_txt.text = "ERROR: Load failed.";
    } else {
      container_mc.loadStatus_txt.text = "Load error: " + errorCode;
    }
  }

  public function destroy ():Void {
    imageLoader.removeListener(this);
    container_mc.removeMovieClip();
  }
}


А в самом кадре вызываем этот класс:
Код:
var viewer:ImageViewer = new ImageViewer(this, 1, 100, 100, 250, 250, 10, 0xCE9A3C);
viewer.loadImage("picture.jpg");
loadmsg_txt.removeTextField();


Многое из методов тут лишнее (бордеры, позиция) - это я потом уберу.
А вот как теперь в этот класс добавить новый метод по смене картинок и задержке между ними?
Например, надо писать в кадре свойство ни с одним значение, а массив картинок.
А как дальше? если можно пример - экшнскрипт я тока учю.

_________________
Мастер.
BlooDHounD Муж.
соучастник
0
Сообщения: 585
Зарегистрирован: 12.03.04
Откуда: Беларусь - Борисов
Сообщение Добавлено: 18 Апрель 2006, 12:59:19 
Добавить?
Код:
private function changePic(id:String):Void {

}

private function delay(value:Number):Void {

}
вот так :)
POLL Муж.
соучастник
17
Сообщения: 632
Зарегистрирован: 30.10.03
Откуда: Ростов-на-Дону
Сообщение Добавлено: 18 Апрель 2006, 14:20:30 

BlooDHounD писал(а):
Добавить?
Код:
private function changePic(id:String):Void {

}

private function delay(value:Number):Void {

}
вот так :)



Супер!
А можно немного по-подробнее :-) о методе private function changePic(id:String):Void и private function delay(value:Number):Void ?
Для примера мона просто процедурку (функцию) привести, мне главное суть уловить - как это делается. Циклы бывают разные, можно крутить их по разному - а мне нужно как правильно.

_________________
Мастер.
BlooDHounD Муж.
соучастник
0
Сообщения: 585
Зарегистрирован: 12.03.04
Откуда: Беларусь - Борисов
Сообщение Добавлено: 18 Апрель 2006, 15:52:43 
Код:
private var interval:Number; // ид интервала, для очистки
// создаём задержку.
// value - сколько милисекунд задерживать
// scope - относительно какого объекта вызывать функцию
// func - имя функции, или сама функция
// а дальше через запитую передаём все параметры функции
public function delay(value:Number, scope:Object, func:Object):Void {
   interval = setInterval( // создаём интервал
      function(scope:Object, func:Object, arg:Array):Void {
         clearInterval(interval);
         if (scope) {
            switch (typeof func) {
               case "string": scope[func](arg); break;
               case "function": func.call.apply(func, [scope].contact(arg)); break;
            }
         } else if (typeof func == "function") func(arg);
   },
   delay,   // задержка
   scope,   // объект который будет this-ом для func
   func,   // функция
   arguments.splice(3) // аргументы функции
   );
}
Код:
viewer.delay(5000, viewer, "changePic", "flower.jpg")
типа того … код не проверялся … смену картинки пиши сам :)
*   Список форумов / Технологии изображения / Flash « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 4 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100