//設定
//スライド画像収納ディレクトリー
var imgDir:String = "img/";
//スライド枚数
var slideNum:Number = 6;
//切り替え間隔(ミリ秒)
var interval:Number = 6000;
//写真の幅、高さ
var w:Number = 360;
var h:Number = 270;
//トランジションのタイプ
var typeNo:Number = 10;
//トランジション時間(秒)
var t_time:Number = 1;
var wipeType:slideshow = new slideshow(imgDir,slideNum,interval,w,h,typeNo,t_time);
addChild(wipeType);
/*transition type
1: left -> right
2: right -> left
3: top -> bottom
4: bottom -> top
5: lefttop -> rightbottom
6: rightBottom -> lefttop
7: center -> around
8: center -> around
9: center -> around
10: random(1-9)
*/
/*8,9は7に同じで、radialの出現頻度を上げるため*/
スクリプト slideshow.as (as3.0)
package {
import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import flash.utils.Timer;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
import flash.geom.*;
public class slideshow extends Sprite {
public function slideshow(imgDir:String,slideNum:Number,interval:Number,
w:Number,h:Number,typeNo:Number,t_time:Number) {
//変数等の定義
var current_slide:MovieClip;
var next_slide:MovieClip;
var picNo:Number=0;//写真番号
var preNo:Number;//ひとつ前の写真(current_slide)番号
var g:Graphics;
var matrix:Matrix = new Matrix();
var gRatio:Number;//グラデーション比
var gRadian:Number;//グラデーション方向角
var gType:Array = new Array(GradientType.LINEAR,GradientType.RADIAL);
slideShow();//初期表示
function slideShow():void {
//表示(これから読み込む)スライド番号、既表示スライド番号の設定
picNo++;
if (picNo>slideNum) {
picNo=1;
}
if (picNo==1) {
preNo=slideNum;
} else {
preNo=picNo-1;
}
//typeNoが8であったらcaseNoとして1-7をランダムに発生
if (typeNo==10) {
var caseNo:int=Math.floor(9*Math.random()+1);
} else {
caseNo=typeNo;
}
gRatio=0;
//TypeNoごとの関連変数の定義
switch (caseNo) {
case 1 :
gRadian=0;
grType = gType[0];
break;
case 2 :
gRadian=Math.PI;
grType = gType[0];
break;
case 3 :
gRadian=Math.PI/2;
grType = gType[0];
break;
case 4 :
gRadian=Math.PI*3/2;
grType = gType[0];
break;
case 5 :
gRadian=Math.PI/4;
grType = gType[0];
break;
case 6 :
gRadian=Math.PI*5/4;
grType = gType[0];
break;
case 7:
gRadian = 0;
grType = gType[1];
break;
case 8:
gRadian = 0;
grType = gType[1];
break;
case 9:
gRadian = 0;
grType = gType[1];
break;
default :
break;
}
//スライドのロード、表示
next_slide=new MovieClip ;
addChild(next_slide);
next_slide.name="pic"+picNo;
var jpg:String=imgDir+"p"+picNo+".jpg";
var mcLoader=new Loader ;
next_slide.addChild(mcLoader);
var urlReq:URLRequest=new URLRequest(jpg);
mcLoader.load(urlReq);
mcLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadedPic);
//jpgをロードし終わった次の段階で;
function loadedPic(event:Event):void {
next_slide.cacheAsBitmap=true;
current_slide=MovieClip(getChildByName("pic"+preNo));
if (current_slide) {
var mask_sp:Shape = new Shape();
addChild(mask_sp);
mask_sp.cacheAsBitmap=true;
g = mask_sp.graphics;
next_slide.mask=mask_sp;
//マスク矩形のグラデーション比率を変化させる
var tw:Tween=new Tween(
mask_sp,"alpha",None.easeOut,1,1,interval/1500,true);
tw.addEventListener(TweenEvent.MOTION_CHANGE,maskChange);
tw.addEventListener(TweenEvent.MOTION_FINISH,slideRemoval);
function maskChange(event:TweenEvent):void {
if (gRatio<256) {
gRatio+=3;
}
gradient();
}
function slideRemoval(event:TweenEvent):void {
if (current_slide) {
removeChild(current_slide);
current_slide=null;
removeChild(mask_sp);
}
}
}
}
}
//interval間隔でslideShow関数を繰り返す
var timer:Timer=new Timer(interval);
timer.addEventListener(TimerEvent.TIMER,slideShow);
timer.start();
//mask_spのグラデーション
function gradient():void {
matrix.createGradientBox( 2*w, 2*h, gRadian, -w/2, -h/2);
g.beginGradientFill(
grType,
[0xffffff, 0xffffff],
[1, 0],
[0, gRatio],
matrix);
g.drawRect( 0, 0,2*w, 2*h );
}
}
}
}