2010年11月30日 星期二

[AS3] 亂數隨機載入外部圖檔(輪播)_每一輪不重覆

外部有6個圖檔,依亂數載入。同一輪已載入過的就不再載入。第1輪播完再播第2輪......



//991228從991130_randomPhoto_1.fla修改

import flash.display.MovieClip;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
//載入Tweener、ColorShortcuts類別
//請至以下URL下載tweener類別程式庫與說明文件
//http://code.google.com/p/tweener/
import caurina.transitions.Tweener;
import caurina.transitions.properties.ColorShortcuts;
//初始化ColorShortcuts
ColorShortcuts.init();

//****** photo陣列 - push() 加入外部圖檔檔名
var photo:Array = new Array();
photo.push("991130_p1.jpg");
photo.push("991130_p2.jpg");
photo.push("991130_p3.jpg");
photo.push("991130_p4.jpg");
photo.push("991130_p5.jpg");
photo.push("991130_p6.jpg");

//
var pNum:uint = photo.length;

//****** intervalDuration - 換圖秒數(毫秒)
//目前設為 5000豪秒,即 5 秒
var intervalDuration:Number = 5000;

//TextFormat物件設定文字格式
var aTextFormat:TextFormat = new TextFormat();
aTextFormat.size = 18;
aTextFormat.color = 0xffffff;
aTextFormat.leftMargin = 5;
aTextFormat.rightMargin = 5;
//宣告TextField文字欄位類別實體infoTextField
var infoTextField:TextField = new TextField();
infoTextField.x = 15;
infoTextField.y = 15;
infoTextField.background = true;
infoTextField.backgroundColor = 0xff2200;
infoTextField.autoSize = TextFieldAutoSize.LEFT;
//將 infoTextField 加入顯示清單
addChild(infoTextField);
//建構Loader類別實體ldr
var ldr:Loader = new Loader();
//
ini();
//
function ini():void
{
 loadPhoto();
}
//
function loadPhoto()
{
 //如果photo陣列元素都被移除掉了
 //以for迴圈重新加入各元素,即外部檔名,同初始值
 if(photo.length == 0){
  for (var i:uint=0; i < pNum; i++) { // pNum
   photo[i] = "991130_p" + String(i+1) + ".jpg";
  }
  trace("------------------------------------------");
 }
 
 //Math.random() 亂數產生0(含)~1(不含)之浮點數, 
 //乘以圖檔張數(即photo陣列長度 photo.length),會得到 0(含)~6(不含) 之符點數
 //Math.floor - 去掉小數 - 會得到0~5之正整數
 var photoRandom:uint = Math.floor(Math.random() * photo.length);
 //photo[photoRandom] - 因應亂數,做為陣列索引,指向陣列元素
 var photoURL:String = photo[photoRandom];
 //splice(起始索引, 刪除數量) - 刪除被選定的陣列元素
 //如此在每一循環載入圖檔,才不會重覆
 photo.splice(photoRandom, 1);
 trace(photoURL);
 //將photoURL所存的圖檔檔名字串指定給 infoTextField 文字欄位顯示
 infoTextField.text = photoURL;
 //setTextFormat()方法,將aTextFormat格式化物件與infoTextField文字欄位關聯
 infoTextField.setTextFormat(aTextFormat);
 //
 //Loader類別實體ldr,以load()方法載入new URLRequest()的相對網址(即圖檔檔名)
 ldr.load(new URLRequest(photoURL));
 //將Event.COMPLETE事件的偵聽程式onLoaderComplete,附加到Loader類別實體ldr的contentLoaderInfo屬性 
 ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
}

//
function onLoaderComplete(e:Event):void
{
 addChild(ldr);
 //將ldr可視物件實體,以x,y座標控制在舞台中央
 ldr.x =  (stage.stageWidth - ldr.width) / 2;
 ldr.y =  (stage.stageHeight - ldr.height) / 2;
 //呼叫漸變屬性設定函式tweenPhoto1()
 tweenPhoto1();
 //setTimeout(closure:Function, delay:Number, ... arguments):uint
 //在指定的延遲時間 (以毫秒為單位) 之後執行指定的函數
 var intervalId:uint = setTimeout(ini, intervalDuration);
}
//
function tweenPhoto1():void{
 Tweener.addTween(ldr, {alpha:0, scaleX:0.9, scaleY:0.9, time:0, onComplete:tweenPhoto2});
} 
function tweenPhoto2():void{
 Tweener.addTween(ldr, {alpha:1, scaleX:1, scaleY:1, time:1.5});
} 

◎另需參閱
指定類別檔路徑 - 以下載及設置Tweener類別庫為例 http://flash.twgogo.org/2010/12/blog-post.html

沒有留言: