2008年10月15日

【練習】使用Loader類別載入物件

  載入動作是Flash作品中常見的技術,在ActionScript 3.0中,去除了過去版本中的.loadMovie()等函式,並以Loader Class來包辦JPEG、GIF、PNG和SWF檔案的載入,加上現有的UI元件:按鈕、進度條等,可以非常快速地實作出載入功能。

原始檔下載

【程式解說】

Loader class最基本的用法如下(接下來的程式只是加上進度顯示和使用者互動):
var my_loader:Loader = new Loader();
my_loader.load(new URLRequest("myPhoto.jpg")); // 相對路徑
addChild(my_loader); // 加入顯示列表

在輸入程式碼之前,必須先完成以下動作(以Flash為開發環境):
  1. 切換回場景編輯。
  2. 按下【Window】-【Components】或按下Ctrl+F7叫出Components列表。
  3. 將Button和ProgressBar拖入舞台。
  4. 上述目的是為了將二者增加至Library,所以接下來將舞台上的2個元件再刪掉。
  5. 切換回程式碼編輯(或按下F9)貼上程式碼。
  6. 按下Ctrl+Enter測試結果
【原始程式碼】
import flash.display.Loader;
import fl.controls.ProgressBar;
import fl.controls.Button;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;

var loader:Loader = new Loader(); // Loader類別

var btn:Button = new Button();
btn.label = "載入圖片"; // 按鈕顯示文字
btn.x = (stage.stageWidth-btn.width)/2; // 置中
btn.y = (stage.stageHeight-btn.height)/2;
addChild(btn);

var pb:ProgressBar = new ProgressBar();
pb.source = loader.contentLoaderInfo; // 直接關聯!
pb.x = (stage.stageWidth-pb.width)/2;
pb.y = (stage.stageHeight-pb.height)/2;
// 按鈕事件
btn.addEventListener(MouseEvent.CLICK, startLoading);
function startLoading(e:MouseEvent):void{
loader.load(new URLRequest("http://esabear.googlepages.com/image_big.jpg"));
addChild(pb); // 按鈕按下後, 顯示進度條
removeChild(btn); // 不顯示按鈕
btn = null; // 表示刪除此變數(由Flash player自行處理)
}
// 載入完畢事件
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeLoading);
function completeLoading(e:Event):void{
addChild(loader); // 載入完畢後, 顯示圖片
removeChild(pb); // 不顯示進度條
pb = null;
loader.width = stage.stageWidth; //調整圖片長寬以顯示全圖
loader.height = stage.stageHeight;
}
程式本身很簡單,光看註解應該就能理解,其中要注意的用法是:
pb.source = loader.contentLoaderInfo;
也就是說ProgressBar可以直接指定來源為loader,並且自動換算進度,至於該如何取得目前的載入的檔案大小或檔案總共容量呢?試著在程式碼末尾加入下列程式碼:
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
function onProgress (e:ProgressEvent):void{
trace("已下載"+e.bytesLoaded+" bytes (總共"+e.bytesTotal+" bytes)");
}
其中的e.bytesLoaded和e.bytesTotal就是解答,也可以使用loader.contentLoaderInfo.bytesLoaded和loader.contentLoaderInfo.bytesTotal代換之,實作上可將兩者相除,來換算進度百分比,用其它的表示手法顯示載入畫面,不一定要用制式的ProgressBar。另外,stage本身也有loaderInfo屬性,如:stage.loaderInfo.bytesTotal即為swf的檔案大小,運用上述的方法就能實作出swf檔案本身的載入進度畫面。


Posted by esabear at 樂多Roodo! │11:43 │回應(0)引用(0)Flash筆記
樂多分類:網路/3C 共同主題:Flash筆記 工具:編輯本文
標籤:練習,Loader,flash,loading
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/7379767