[轉][翻譯]LoaderMax使用指導(二)

http://hi.baidu.com/mr_ziqiang/blog/item/b2c33f731afc32138701b003.html

 

 

翻譯:閃刀浪子  www.iflashigame.com  http://hi.baidu.com/mr_ziqiang

點這裏看LoaderMax使用指導(一)

7、設定區域對image/video/swf進行裁剪
假設你想讓一張圖片等比縮放以適應到某個區域,但是不希望在區域的邊緣留下空白區。怎麼做?你可以首先設定scaleMode屬性爲"proportionalOutside",然後將"crop"屬性設置爲true。這樣可以使圖片等比填充整個區域,並且講超出區域的部分裁剪掉。下面給一段代碼:

var loader:ImageLoader = new ImageLoader("1.jpg", {width:200, height:100, scaleMode:"proportionalOutside", crop:true, container:this, x:50, y:70});

8、progress 和 rawProgress有什麼不同?(譯者注:這個特性需要特別瞭解)
所有的加載器都有一個"progress"屬性來顯示"bytesLoades"和"bytesTotal"的比例(即進度)。但是LoaderMax類還多了一個"rawProgress"的屬性,這個屬性將所有的加載文件同等對待而且與文件大小無關。它在一些特定的場合下會比較有用:比如你發現你的進度條不穩定或者你想忽略文件大小的評估同時不想給你的加載器設定estimatedBytes 。

下面有個例子,可以讓你充分了解"progress"和"rawProgress"在各種情景下的比較。你會發現"rawProgress"進度條不會突變,但是相對於以文件大小爲計算依據的方式速度會一會兒快,一會兒慢。
點擊load()按鈕你可以看到"progress"非常精確並且平滑。(這是因爲estimatedBytes的值是正確的)接下來你試着改變estimatedBytes的值或者刪除estimatedBytes的值看一下省略的時候的運行情況。試着取消“auditSize”的複選框,可以觀察“auditSize”爲false的情況下是如何運行的。更多有關進度條暴增和回退的問題原因會在下一節做講解。



9、避免進度條的抖動(暴增或者回退)
不知道你有沒有在使用中遇到過進度條暴增活着回退的情況。一般在單一加載的時候不會出現這種情況,但是當你用一個LoaderMax實例去加載多個文件的一些特殊場合會發生這種情況。首先說一下原因和我所使用的方案。

爲了精確的計算一組加載器總的進度,我們最關鍵的是需要知道每一個文件的文件大小。但是在文件還沒有開始加載的時候我們如何知道要加載的大小呢?LoaderMax通過兩種方式來處理:第一種——在創建你的loader的時候隨意指定一個值給"estimatedBytes"屬性,就像這樣:

new ImageLoader("1.jpg", {estimatedBytes:26000});

如果你給一個加載器設定了一個"estimatedBytes"值,LoaderMax會根據這個值來計算"progress",直到開始真正加載取到了真實的文件大小值再替換掉它。如果你所設定的值不準確,就會在修正這個文件大小值的時候出現進度條的抖動。具體現象爲:如果你所設定的值比真實的文件大小值小很多,就會出現進度條的回退。如果你所設定的值比真實的文件大小值大很多,就會出現進度條的暴增現象。

LoaderMax所採用的第二種解決方式是檢查真實文件。默認情況下會查找每一個子加載器是否有"estimatedBytes"設置。一旦發現沒有進行設置,就會迅速開啓一個URLStream取得真實的文件大小,並立刻關閉再檢查下一個。全部檢測完畢後,就會按照真實的文件總字節數加載並計算進度。這樣做的好處是減少了你的麻煩並且會進度會非常準確。不過會要在開始下載前花費一些檢查的時間。

當然你也可以關閉"auditSize"選項或者進行全局設置關閉所有加載器的"auditSize",下面是代碼:

var loader:ImageLoader = new ImageLoader("1.jpg", {width:200, //turns auditing off for only this instance:
var queue:LoaderMax = new LoaderMax({auditSize:false});

//changes the default auditSize to false for all LoaderMax instances created after this point
LoaderMax.defaultAuditSize = false;height:100, scaleMode:"proportionalOutside", crop:true, container:this, x:50, y:70});

好了,知道了原因下面我們來看一下如何解決,這裏有一些方案共你選擇:
比較省事、精確、需要一點額外時間(默認)的方式
忽略
estimatedBytes 選項,讓LoaderMax自己去計算。

給一個估計的文件大小值設置到estimatedBytes
這種方式需要給一個合適的值,否則過大進度條會暴增,過小進度條會回退。

比較省事、非常不精確、無需額外時間
關閉自動校驗長度開關也不給默認的文件大小值,此時文件長度會使用默認的20000字節爲長度。

省事、比較精確、無需額外時間
關閉自動校驗長度開關改用"rawProgress"來代替"progress"。由於rawProgress的計算方式與文件長度有關僅與文件個數有關,所以沒有必要校驗文件長度了。

10、每一個文件都會請求兩次嗎?
不是這樣的。事實上只有當你沒有設置estimatedBytes並且自動校驗長度開關打開的情況下才需要請求兩次服務器。多出的這一次是用於校驗文件長度的。

11、集成roo swf到LoaderMax進度
加入你要獲取一個很大的swf文件,還需要加載很多素材,同時你還希望瞭解所有這些的進度(包括這個root Swf)。你可以這樣來做:

var queue:LoaderMax = new LoaderMax({onProgress:progressHandler, onComplete:completeHandler});
queue.append( new SelfLoader(this) ); //just to include the root swf in the progress calculations
queue.append( ...append your other loaders... );
queue.load();

12、parse()一個完整的Url數組
有時候你會希望簡單的給LoaderMax一個數組,讓它自己使用對應的類型去加載。可以用下面的方法來做:

var urls:Array = ["1.jpg", "video.flv", "child.swf", "audio.mp3"];

//activate the types of loaders so that parse() can recognize the appropriate extensions (only necessary once)
LoaderMax.activate([ImageLoader, VideoLoader, SWFLoader, MP3Loader]);

var queue:LoaderMax = LoaderMax.parse(urls, {onComplete:completeHandler}, {autoPlay:false});
queue.prependURLs("http://www.greensock.com/assets/"); //saves us from having to include this in every URL in the array, and makes switching servers very easy.
queue.load();

取得加載的內容用下面的方法:

function completeHandler(event:LoaderEvent):void {
var video:VideoLoader = LoaderMax.getLoader("http://www.greensock.com/assets/video.flv");
addChild( video.content );
video.playVideo();
}

13、取得代碼提示和嚴格的數據類型
如果你不介意文件長度稍微會長一點、代碼量會大一些。可以使用
 com.greensock.loading.data包裏面的類來設定值對象,並作爲參數傳給記載器。比如:

var config:LoaderMaxVars = new LoaderMaxVars();
config.name = "queue1";
config.onComplete = completeHandler;
config.onProgress = progressHandler;
config.maxConnections = 1;
var queue:LoaderMax = new LoaderMax(config);


終於翻譯完了,呵呵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章