Jul 31, 2007

收到 Essential ActionScript 3.0 --- 接力貼


邦邦Ticore之後收到書了也來貼一下...XD
從Amazon定的,上星期三邦邦代訂到今天收到...真是迅速啊~~總價由於有人一起分擔運費小小給它便宜了一點點啦! NT.1,437

Jul 25, 2007

Load Manager for FL2.X (1)

載入控制常常是各大Flash討論版中名列前矛的老掉牙問題串,可見如何做好載入控制是一個很重要的課題,FL1.1 載入外部檔案的限制是一個frame只能執行一次載入,而 FL2.X 則是一個frame只處理5次載入事件,FL1.1 載入研究在很久以前就已經分享過了,所以這次與大家分享是幾種FL2.X處理載入控制的方法:

Load Manager有個很重要的特點:唯一性,當多個載入的SWF中如果也有load行為時,Load Manager只能存在一個。

為了達到Load Manager的唯一性,這邊使用程式 Design Pattern 中蠻常用的 Singleton Pattern來實作,講到這邊大概已經有人快崩潰了,連Design Pattern的字眼都出現了,感覺越扯越專業捏?不過別緊張,搞不懂原理的人就直接將.as拿去修改使用就好,Erin一直認為,如果你對它有興趣,就會願意花很多時間去理解它,強求是沒有用的。回到正題,Singleton 顧名思義就是"獨生子",它的原理就是讓 Class只有一個實體,不管誰來跟它要東西,它也只提供一個窗口。好嚕!Erin 的懶人程式講解就到這邊,有興趣的請直接點選上面的聯結去理解它個夠!

[LoadManager.as version 1 教學檔下載]

LoadManager.as:
在一開始的屬性宣告就建立一個實體
private static var _manager:LoadManager = new LoadManager();
提供窗口讓外部取得實體,這樣的方式就可以確保所有人使用LoadManager時,用到的都是同一個實體。處理載入事件的是最簡單的 onEnterFrame,目的是讓loading工作簡單化,手機AP開發重點之一:簡單卡好
static function getInstance():LoadManager {
return _manager;
}

用法:
var loader = LoadManager.getInstance();
loader.loadClip(fileURL, targetMovieClip);


接下來測試看看
LoadManager01_1.swf:
var loader = LoadManager.getInstance();
for (var i = 0; i<7; i++) {
var mc = this.createEmptyMovieClip("m"+i, i+1);
loader.loadClip("2.swf", mc);
mc._x += i*20;
}


LoadManager01.swf:
var loader = LoadManager.getInstance();
var haha = this.createEmptyMovieClip("mc", 0);
haha._y = 100;
loader.loadClip("LoadManager01_1.swf", haha);
//載入LoadManager01_1.swf來共用LoadManager
for (var i = 0; i<7; i++) {
var mc = this.createEmptyMovieClip("m"+i, i+1);
loader.loadClip("1.swf", mc);
mc._x += i*20;
}



output message:
*** Load manager: start ***
Load manager: load LoadManager01_1.swf to _level0.mc
Load manager: load 1.swf to _level0.m0
Load manager: load 1.swf to _level0.m1
Load manager: load 1.swf to _level0.m2
Load manager: load 1.swf to _level0.m3
Load manager: load 1.swf to _level0.m4
Load manager: load 1.swf to _level0.m5
Load manager: load 1.swf to _level0.m6
Load manager: load 2.swf to _level0.mc.m0
Load manager: load 2.swf to _level0.mc.m1
Load manager: load 2.swf to _level0.mc.m2
Load manager: load 2.swf to _level0.mc.m3
Load manager: load 2.swf to _level0.mc.m4
Load manager: load 2.swf to _level0.mc.m5
Load manager: load 2.swf to _level0.mc.m6
*** Load manager: closed ***

你會發現它共分了三個frames將所有的東西載入!^^

on target 實際測試:(Nokia 7610)
很不幸的,當大量的載入在同一時間執行,即使已經使用單一窗口進行載入工作,還是會有漏圖的情況產生,尤其外部檔案大口吃掉記憶體時情況更為嚴重,所以在Flash lite AP的設計上,最好規避同一時間進行太多的載入工作,或者請愛用一個frame只做一次載入,這樣漏圖的情況會降到最低...修改很簡單,僅將 LoadManager.as中的doLoad迴圈部份mark起來就好...=)
private function doLoad() {
//while (_count++<5) {
if (_loadList.length>0) {
var now:Array = _loadList[0];
now[1].loadMovie(now[0]);
trace("Load manager: load "+now[0]+" to "+now[1]);
_loadList.shift();
} else {
trace("*** Load manager: closed ***");
_isLoading = false;
delete _eventHandler.onEnterFrame;
_eventHandler.removeMovieClip();
//break;
}
//}
//_count = 0;
}


也許還有其他更棒的方法,如果新發現的話再與大家分享...=)

Jul 16, 2007

WhoNeedsAniPhone.com


這是WhoNeedsAniPhone.com發表的一個類iPhone使用者介面的Flash lite application for Windows Mobile 5 and 6,預計完成後會包含程式集、觸控螢幕鎖與一些app,如果你有PDA phone base on WM5 or WM6的話可以加入他們的beta tester募集 =)

[App] 國道計程收費速算器 2.0

之前的版本跟目前 國道計程官網 所列資料誤差很大,這支 App 也一直有人在使用,所以為了答謝愛用者只好做了一次大更新,因為對 CoronaSDK scrollView widget 有點怨言,所以 iOS 版本採用 Swift3 重寫了一遍,不過 Android 版本還是維...