2012-10-05 92 views
0

actionscript預加載器是否必須擴展MovieClip?純粹的AS3預加載器是否必須擴展MovieClip?

... 
public class Preloader extends MovieClip 
{ 

    public function Preloader() 
    { 
     if (stage) { 
      stage.scaleMode = StageScaleMode.NO_SCALE; 
      stage.align = StageAlign.TOP_LEFT; 
     } 
     addEventListener(Event.ENTER_FRAME, checkFrame); 
     loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); 
     loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); 

     // TODO show loader 
    } 
... 

還可以擴展Sprite嗎?

+0

您是否嘗試過使用Sprite而未成功? – inhan

+0

說實話,我現在沒有項目設置,我有點懶得啓動我的閃存環境。首先快速忙於一些Java的東西。 – avanderw

+0

Downvote for laziness,upvote for honest。簡而言之;它可以(也應該)擴展Sprite,除非你使用時間線(在這種情況下它必須使用MovieClip)。 –

回答

3

預加載只能擴展雪碧,如果它的實際加載一個獨立的SWF。如果您使用內置預加載器製作SWF,則需要兩幀,因爲Flash播放器會按順序加載幀,所以這是加載和顯示SWF的一部分的唯一方法,這是預加載器工作所需的一部分。對於那些你需要一個MovieClip的幀,Sprites沒有幀。

0

Vesper的回答後。我做了一些小動作

private function checkFrame(e:Event):void 
    { 
     if (currentFrame == totalFrames) 
     { 
      stop(); 
      loadingFinished(); 
     } 
    } 

Sprite無法訪問currentFrame,totalFrames甚至停止方法。但是,MovieClip可以。

0

是的,你可以擴展Sprite

而不是框架的事件,你可以使用一個TimerEventTimer。如果您因某種原因想避免所有基於幀或時間的參考,則可以聽取ProgressEvent。您可以在任一事件的處理程序中創建/加載和操作「預加載器」圖形。

這是難度比通常是必要的,而且很多重複MovieClip功能,所以你可能會需要一個很好的理由來走這條路線。