2009-11-03 88 views
0

我試圖設置一個預加載器來顯示主SWF的負載進度,其中嵌入了所有的資產。我發現工廠類方法爲described on bit-101,但似乎沒有顯示加載進度。 swf加載正常,但bytesLoaded總是等於bytesTotal,因此preloader永遠不會被調用。主SWF預加載器問題

這是工廠類我使用

package src 
{ 
import flash.display.DisplayObject; 
import flash.display.MovieClip; 
import flash.display.StageScaleMode; 
import flash.display.StageAlign; 
import flash.events.Event; 
import flash.utils.getDefinitionByName; 

/** 
    * ... 
    * @author DefaultUser (Tools -> Custom Arguments...) 
    */ 
public class Factory extends MovieClip 
{ 
    private var preloader:Preloader; 

    public function Factory() 
    { 
    stop(); 
    stage.scaleMode = StageScaleMode.NO_SCALE; 
    stage.align = StageAlign.TOP_LEFT; 
    addEventListener(Event.ENTER_FRAME, enterFrame); 
    } 

    public function enterFrame(e:Event):void 
    { 
    trace(root.loaderInfo.bytesLoaded, root.loaderInfo.bytesTotal); 

    if (framesLoaded == totalFrames) { 
    removeEventListener(Event.ENTER_FRAME, enterFrame); 
    nextFrame(); 
    init(); 
    } 
    else { 
    var percent:Number = root.loaderInfo.bytesLoaded/root.loaderInfo.bytesTotal; 
    trace(percent); 
    } 
    } 

    private function init():void 
    { 
    var mainClass:Class = Class(getDefinitionByName("Main")); 
    if (mainClass) { 
    var mainApp:Object = new mainClass(); 
    addChild(mainApp as DisplayObject); 
    mainApp.init(); 
    } 
    } 

} 

} 

呼籲enterFrame事件的跟蹤顯示bytesLoaded和BYTESTOTAL是相等的。

這是swf加載時調用的Main類。

package 
{ 
import flash.display.Sprite; 

[Frame(factoryClass="src.Factory")] 

public class Main extends Sprite 
{ 
    [Embed(source="images/FinalImg01.jpg")] 
    private var Image1:Class; 
    [Embed(source="images/FinalImg02.jpg")] 
    private var Image2:Class; 
    [Embed(source="images/FinalImg03.jpg")] 
    private var Image3:Class; 

    public function init():void 
    { 
    trace("loaded"); 
    } 
} 

} 

這首先正確地調用工廠類,然後instansiates主要和調用init()。但正如我上面提到的那樣,預加載從未顯示,因爲它似乎正在加載所有的東西。

這是一個問題,我嵌入圖像的方式或因爲我在本地測試?

還有人遇到過這些問題嗎?

感謝 豐富

+0

雅,看來你是在本地測試它,這就是爲什麼它是在一杆得到加載。嘗試使用一些其他沉重的圖像(最好不要在你的系統上,可以從網上下載)。 – bhups 2009-11-03 14:50:01

回答

0

我已經成功地在我所有的遊戲中使用同樣的方法,它可以遠程測試,作爲本地測試幾乎是自動加載之前加載所有字節可以反應。

所以是的,這是因爲你在本地進行測試。將SWF上傳到您的網絡服務器,您可以從那裏看到實際的加載進度。如果你有一個快速連接,爲測試目的而人爲地膨脹你的文件也不會受到傷害。

0

您使用的是什麼版本的Flash?我知道預加載在CS2中的工作方式與CS3中的非常不同。我有一個類似的問題,讓一個預裝載器在CS3中工作一段時間。在採取任何其他行動之前

http://www.senocular.com/flash/tutorials/faq/

要使用AS3總結了SWF文件的整個庫將被下載。要解決此問題,您可以告知每個庫項目不要在第1幀中加載,然後在第一幀中設置預加載器。

另一個解決方案是將一個單獨的SWF文件用於執行預加載。只要預加載器SWF加載完成,它就可以使用Loader對象加載較大的SWF文件。然後,Loader對象提供了獲取通過事件加載多少數據的方法。

第三種解決方案是將SWF文件上傳到像MochiAds這樣的網站,並允許他們提供預加載功能。如果你正在製作遊戲,這將是最簡單的解決方案。

0

我沒有使用Flash,所以不會在上面提到的第一幀解決方案上進行表達,因爲我沒有直接訪問庫或時間線。工廠方法是一種在純ActionScript中實現此功能的方法,如果您正在Flash IDE之外開發,則必須使用此方法。

經過一番研究,我發現問題來自FlashDevelop的實現。實際上,最新的FlashDevelop版本中內置了一個模板,可以實現相同的結果,而不會不必要地導入大量的Flex組件。

退房這個職位,如果你需要任何更多信息

http://www.flashdevelop.org/community/viewtopic.php?f=13&t=3365