2011-06-06 58 views
1

我使用FlashPunk遊戲引擎和FlashDevelop SDK在ActionScript 3.0中創建了一個遊戲。 我創建了自己的MovieClip類,它帶有一個預加載的影片剪輯文件。ActionScript:將同一個swf文件的多個實例添加到舞臺上

public function MyMovieClip(file:MovieClip, posX:int, posY:int, frameRate:int) 
    { 
     movieClip = file; 
     movieClip.x = posX; 
     movieClip.y = posY; 
     movieClip.stop(); 
     FP.stage.addChild(movieClip); 


     timer = new Timer((1/frameRate) * 1000); 
     timer.start(); 
     timer.addEventListener(TimerEvent.TIMER, onTick); 
    } 

爲我的影片剪輯的更新如下:

private function onTick(e:TimerEvent):void 
    { 
     if (isRepeating) 
     { 
      if (movieClip.currentFrame == movieClip.totalFrames) 
      { 
       movieClip.gotoAndStop(0); 
      } 
     } 
     movieClip.nextFrame(); 
    } 

說我有問題是,當我有使用相同的SWF文件,只有在MyMovieClip類的多個實例最後一個實例呈現並且針對我所擁有的每個實例進行更新(例如MyMovieClip的3個實例,最後一個實例以3倍的速度更新)。

如果需要更多信息,我會很高興提供它。

+0

後的代碼你在哪裏調用實例化和調用MyMovieClip 。我有一種感覺,你每次調用函數都會覆蓋這些對象。 – 2011-06-06 16:35:39

回答

2

你可以這樣做創建相同加載的SWF的新實例:

// re-use a loaded swf 
    var bytes:ByteArray = existingLoader.content.loaderInfo.bytes; 
    var loader:Loader = new Loader(); 
    loader.loadBytes(bytes); 

其中existingLoader是你用來加載SWF在首位的裝載機。

loadBytes使用將派遣另一COMPLETE事件的裝載機,所以當你使聽者對於這一點,你可以使用「克隆」版本:

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSWFClonedComplete); 
+0

如果我無法訪問existingLoader,該怎麼辦? – 2011-06-06 11:27:03

+0

我玩過我的代碼,這樣我就可以訪問現有的加載器和示例工程。我不確定這是我想要做什麼,因爲我不想再加載。 從現有加載程序加載字節比創建新加載程序要快得多。 我試着做movieClip = existingLoader.content,因爲加載器包含一個MoveiClip對象,但我得到了以下錯誤: 錯誤:隱式強制使用靜態類型的值flash.display:將DisplayObject轉換爲可能不相關的類型flash.display:影片剪輯。 – 2011-06-06 12:19:08

+0

你必須投影到'movieClip = existingLoader.content作爲MovieClip'。 – DanielB 2011-06-06 15:09:03

1

您可能有多個MyMovieClip的實例,但是file:MovieClip正在添加到舞臺中。如果這總是與MovieClip相同的實例,那麼您將獲得此結果,而不管您多久實例化一次您的類,因爲您正在多次向舞臺添加相同的實例。

您可能必須多次加載「預加載的剪輯」,或者如果您能夠(您知道課程名稱等),請從加載的剪輯中創建一個帶有getDefinitionByName()的所需課程的新實例,然後附加此新實例。

+0

是的你是對的。那麼我將如何加載這個swf,以便我可以多次使用它。目前我將所有的swfs加載到字典中作爲MovieClips。每次我想用它製作影片剪輯時,我都不想重新加載swf。 – 2011-06-06 11:13:26

+0

幾秒前我編輯了我的帖子。你必須知道加載剪輯中的類定義。 – DanielB 2011-06-06 11:16:03

+0

我是ActionScript新手,有沒有什麼機會可以解釋你提到的getDefinitionByName()方法。 – 2011-06-06 11:28:26

相關問題