【フォトギャラリー追加機能:その2】画像遷移時にfl.transitionのエフェクトを付ける

ざくっと書けた!ありがとう大佐!
こちらもほんと汚いスクリプトですので参考程度で…。


クリックで作例を表示します。


XMLにtransitionのタイプを指定する項目を追加して、if文で振り分けています。
タイプだけ変えればいいかと思いきや、各クラスで色々パラメータが違うんですね。なのでこの方法に。

なんかもっといい方法ないかなぁ。

XMLに記述を追加。transition="数字"でタイプを選別しています。

<?xml version="1.0" encoding="utf-8"?>
<data>
	<photoset img="photo/1.jpg" comment="1枚目の写真です。" transition="0" />
	<photoset img="photo/2.jpg" comment="2枚目の写真です。" transition="1" />
	<photoset img="photo/3.jpg" comment="3枚目の写真です。" transition="2" />
	<photoset img="photo/4.jpg" comment="4枚目の写真です。" transition="3" />
	<photoset img="photo/5.jpg" comment="5枚目の写真です。" transition="0" />
	<photoset img="photo/6.jpg" comment="6枚目の写真です。" transition="1" />
</data>

ActionScript3.0

太字が上記自動遷移機能付きフォトギャラリーからの追加・変更部分です。


import fl.transitions.*;
import fl.transitions.easing.*;


var xmlLoader:URLLoader = new URLLoader();
var xmlURL:URLRequest = new URLRequest("photo.xml");
var imgLoader:Loader = new Loader();
var i:int = 0;
var imgBoard_mc:MovieClip = new MovieClip();
var myXML:XML;


// photo.xmlの読み込みが完了したら
xmlLoader.addEventListener(Event.COMPLETE, xComplete);
function xComplete(eventObject:Event):void {
var myXML:XML = new XML(xmlLoader.data);
XML.ignoreWhitespace = true;

var imgURL = new URLRequest(myXML.photoset[i].@img);
imgLoader.load(imgURL);
imgBoard_mc.addChild(imgLoader);
addChildAt(imgBoard_mc, 0);

number_txt.text = String( (i+1) + "/" + myXML.photoset.length() );
comment_txt.text = String(myXML.photoset[i].@comment);

// トランジション機能を追加
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, xTransition);
function xTransition(eventObject:Event):void {
// @transitionが0 … fly
if (myXML.photoset[i].@transition == 0) {
TransitionManager.start(imgBoard_mc, { type:Fly, direction:Transition.IN, duration:3, easing:Elastic.easeOut, startPoint:9 });
// @transitionが1 … Photo
} else if (myXML.photoset[i].@transition == 1) {
TransitionManager.start(imgBoard_mc, { type:Photo, direction:Transition.IN, duration:1, easing:None.easeNone });
// @transitionが2 … Iris
} else if (myXML.photoset[i].@transition == 2) {
TransitionManager.start(imgBoard_mc, { type:Iris, direction:Transition.IN, duration:2, easing:Strong.easeOut, startPoint:5, shape:Iris.CIRCLE });
// @transitionが3 … Fade
} else if (myXML.photoset[i].@transition == 3) {
TransitionManager.start(imgBoard_mc, { type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut });
}
}

// タイマー部分
var myTimer:Timer = new Timer(4000, 0);
myTimer.addEventListener(TimerEvent.TIMER, xNextTimer);
myTimer.start();
//指定秒数ごとに以下の処理を実行
function xNextTimer():void {
if (i < myXML.photoset.length()-1) {
i += 1;
imgURL = new URLRequest(myXML.photoset[i].@img);
imgLoader.load(imgURL);
number_txt.text = String( (i+1) + "/" + myXML.photoset.length() );
comment_txt.text = String(myXML.photoset[i].@comment);
trace("MemoryUse : "+Math.round(System.totalMemory/1024)+"KByte");
} else if(i == myXML.photoset.length()-1) {
i = 0;
imgURL = new URLRequest(myXML.photoset[i].@img);
imgLoader.load(imgURL);
number_txt.text = String( (i+1) + "/" + myXML.photoset.length() );
comment_txt.text = String(myXML.photoset[i].@comment);
}
}
//タイマー再開関数
function xReTimer():void {
myTimer.start();
}


// 進むボタン
var next_btn:Sprite = new Sprite();
next_btn.buttonMode = true;
next_btn.graphics.beginFill(0xffffff, 0);
next_btn.graphics.drawRect(150, 0,50, 200);

next_btn.addEventListener(MouseEvent.MOUSE_DOWN, xNextClick);
function xNextClick(eventObject:MouseEvent):void {
myTimer.stop(); // タイマーをストップさせる
var myInterval:uint = setTimeout(xReTimer, 1000);
if (i < myXML.photoset.length()-1) {
i += 1;
imgURL = new URLRequest(myXML.photoset[i].@img);
imgLoader.load(imgURL);
number_txt.text = String( (i+1) + "/" + myXML.photoset.length() );
comment_txt.text = String(myXML.photoset[i].@comment);
// 最初の写真に戻るように変更
} else if(i == myXML.photoset.length()-1) {
i = 0;
imgURL = new URLRequest(myXML.photoset[i].@img);
imgLoader.load(imgURL);
number_txt.text = String( (i+1) + "/" + myXML.photoset.length() );
comment_txt.text = String(myXML.photoset[i].@comment);
}
}
addChild(next_btn);


// 戻るボタン
var pre_btn:Sprite = new Sprite();
pre_btn.buttonMode = true;
pre_btn.graphics.beginFill(0xffffff, 0);
pre_btn.graphics.drawRect(0, 0,50, 200);

pre_btn.addEventListener(MouseEvent.MOUSE_DOWN, xPreClick);
function xPreClick(eventObject:MouseEvent):void {
myTimer.stop(); // タイマーをストップさせる
var myInterval:uint = setTimeout(xReTimer, 1000);
if (i > 0) {
i -= 1;
var imgURL:URLRequest = new URLRequest(myXML.photoset[i].@img);
imgLoader.load(imgURL);
number_txt.text = String( (i+1) + "/" + myXML.photoset.length() );
comment_txt.text = String(myXML.photoset[i].@comment);
// 同じく最後の写真に戻るように変更
} else if(i == 0) {
i = myXML.photoset.length()-1;
imgURL = new URLRequest(myXML.photoset[i].@img);
imgLoader.load(imgURL);
number_txt.text = String( (i+1) + "/" + myXML.photoset.length() );
comment_txt.text = String(myXML.photoset[i].@comment);
}
}
addChild(pre_btn);

}
xmlLoader.load(xmlURL);
this.stop();


解説や細かい修正はまた今度!お腹が空きました。