flashiroha

(91) TransitionManagerクラスを使ったスライドショー2(as3.0&2.0)   2009/8/18

as3.0
as2.0

import flash.display.Loader;
import flash.net.URLRequest;
import fl.transitions.*;
import fl.transitions.easing.*;

var duration:Number=5000;//スライド切り替え間隔(ミリ秒)
var slideNum=20;//スライド枚数
var n:uint=1;//ステージに読み込むスライドの番号初期値
var m:uint=0;//前回読み込まれて表示されているスライドの番号初期値
var picTween:Tween;

//transitioタイプを配列で定義
var transition:Array=new Array(Blinds,Iris,Photo,PixelDissolve,Zoom,Fly);

//最初のスライド表示
displaySlide();
//一定間隔でpassSlide関数を実行するタイマーの設置、スタート
var timer=new Timer(duration);
timer.addEventListener(TimerEvent.TIMER, passSlide);
timer.start();

//表示するスライドの番号切り替え
function passSlide(e:TimerEvent):void {
  if (n>slideNum-1) {
    n=1;
    m=slideNum;
  } else {
    n++;
    m=n-1;
  }
  displaySlide();
}

//スライドの表示
function displaySlide():void {
  var load_mc:MovieClip = new MovieClip();
  addChildAt(load_mc,0);
  var imgLoader:Loader = new Loader();
  load_mc.addChild(imgLoader);
  load_mc.name="pic"+n;
  load_mc.x=25;
  load_mc.y=25;
  var url:String="img2/p"+n+".jpg";
  var urlReq:URLRequest=new URLRequest(url);
  imgLoader.load(urlReq);
  imgLoader.contentLoaderInfo.addEventListener( Event.COMPLETE , setTransition);
  function setTransition(e:Event):void {
    if (m) {
      var current_mc = MovieClip(getChildByName("pic"+m));
      var next_mc = MovieClip(getChildByName("pic"+n));
      var transType:Class=transition[Math.floor(Math.random()*transition.length)];
      var myTransition:TransitionManager=new TransitionManager(current_mc);
      myTransition.startTransition({type:transType, direction:1, duration:2, shape:"CIRCLE", startPoint:2, xSections:20, ySections:20, dimension:1, easing:Regular.easeOut});
      picTween=new Tween(next_mc,"alpha", None.easeOut,0,1,2,true);
      picTween.addEventListener(TweenEvent.MOTION_FINISH, removePic);
      function removePic(event:TweenEvent):void {
        removeChild(current_mc);
        current_mc=null;
      }
    }
  }
}

import mx.transitions.*;
import mx.transitions.easing.*;



var duration:Number = 5000;
var slideNum = 20;
var n:Number = 1;
var m:Number = 0;
var picTween:Tween;



var transition:Array = new Array(Blinds, Iris, Photo, PixelDissolve, Zoom, Fly);

displaySlide();

ID = setInterval(passSlide, duration);




function passSlide():Void {
  if (n>slideNum-1) {
    n = 1;
    m = slideNum;
  } else {
    n++;
    m = n-1;
  }
  displaySlide();
}


function displaySlide():Void {
  load_mc = this.createEmptyMovieClip("pic"+n, 100-n);
  load_mc._x = 25;
  load_mc._y = 25;
  var imgLoader:MovieClipLoader = new MovieClipLoader();
  jpg = "img2/p"+n+".jpg";
  imgLoader.loadClip(jpg,load_mc);
  var oListener:Object = new Object();
  oListener.onLoadInit = function() {
     setTransition();
  };
  imgLoader.addListener(oListener);
  function setTransition():Void {
    if (m) {
      var current_mc = _root["pic"+m];
      var next_mc = _root["pic"+n];
      var transType:Function = transition[Math.floor(Math.random()*transition.length)];
      var myTransition:TransitionManager = new TransitionManager(current_mc);
      myTransition.startTransition({type:transType, direction:1, duration:2, shape:"CIRCLE", startPoint:2, xSections:20, ySections:20, dimension:1, easing:Regular.easeOut});
      picTween = new Tween(next_mc, "_alpha", None.easeOut, 0, 100, 2, true);
      picTween.onMotionFinished = function() {
        current_mc.removeMovieClip();
      };
    }
  }
}

<概要>
・一定間隔の関数呼び出しに応じて、表示中のスライド(current_mcにホールドされている)の下層に次のスライド(next_mc)を読み込み
・読み込みが終了したら、表示中のスライドをTransitionManager(6タイプからランダムに選択)を使って消すと同時に、次のスライドをTweenクラスを使ってフェイドインさせる
・Tweenが終了したら、消したスライドをremoveChildで削除し、メモリーを解放する
<メモリーの解放について>
・removeChildをしないと、メモリー負荷の蓄積が起こる
current_mc=null; は効果判然とせず

 
flashirohaサイト内  Web全体