2013-04-01 122 views
1

我正在使用flash/actionscript進行遊戲,特別是在某些事情上我有點麻煩。我在閃光方面的知識確實有限,因此在這裏可能無助於我,但無論如何。在我的遊戲中,我有一個幫助按鈕。如果點擊此按鈕,會彈出一個屏幕,顯示如何對玩家執行操作。這些說明分爲多個SWF文件,每次單擊此按鈕時,都會將這些外部SWF文件中的一個加載到遊戲中以供使用。如何使用Actionscript 3卸載或刪除外部加載的SWF?

我可以做這個部分就好了,但是如果玩家進一步進入遊戲並點擊幫助按鈕,則會顯示幫助以及以前顯示的每個幫助文件。

很顯然,我不希望發生這種情況,我嘗試了很多沒有成功的事情。

任何建議非常感謝。

編輯: 這是我用來加載幫助文件的代碼。

private function prepHelp(title:String):void 
    { 
     // introduction help files 
     switch(title) { 
      case "Welcome to Game Module 1": gameUI.singleton.loadHelp("Help/game_module1.swf"); break; 
      case "Welcome to Game Module 2": gameUI.singleton.loadHelp("Help/game_module2.swf"); break; 
      case "Welcome to Game Module 3": gameUI.singleton.loadHelp("Help/game_module3.swf"); break; 
     } 
    } 

這些叫我loadHelp()函數在gameUI類:

public function loadHelp(file_name:String):void 
    { 
     helpBtn.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void { 

       _helpObject.loadHelp(file_name); 
       singleton.addChild(_helpObject); 
       _helpObject.dispatchEvent(new Event("getHelp")); 
      } 
     ); 
    } 

這樣一來,幫助SWF被加載在我helpView.as類我_helpObject對象:

public class helpView extends Sprite 
{ 
    // variables associated with loading help content 
    private var _helpLoader:Loader; 
    private var _loader:Loader; 
    private var _helpRequest:URLRequest; 
    private var _helpMc:MovieClip = new MovieClip(); 

    private var _exitButton:Sprite = new Sprite(); 

    public function helpView():void {} 

    public function loadHelp(help_file:String):void 
    { 
     _helpRequest = new URLRequest("swf/help_files/"+help_file); 
     initialize(); 

     addEventListener("getHelp", getHelp); 
    } 

    private function initialize():void 
    { 
     _exitButton.graphics.lineStyle(1, 0x000000, 1); 
     _exitButton.graphics.beginFill(0xffffff); 
     _exitButton.graphics.drawRect(0, 0, 75, 25); 
     _exitButton.graphics.endFill(); 
     _exitButton.buttonMode = true; 
     _exitButton.alpha = 1; 

     _exitButton.x = gameUI.singleton.stage.stageWidth - 210; 
     _exitButton.y = gameUI.singleton.stage.stageHeight - 55; 

     _exitButton.addEventListener(MouseEvent.CLICK, closeHelp); 
    } 

    private function getHelp(evt:Event):void 
    { 
     _helpLoader = new Loader(); 
     _helpLoader.load(_helpRequest); 

     _helpLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, showHelp); 
    } 

    private function showHelp(evt:Event):void 
    { 
     _loader = Loader(evt.target.loader); 

     // set the width and height of the help swf to the dimensions of the game window. 
     _loader.content.width = gameUI.singleton.stage.stageWidth; 
     _loader.content.height = gameUI.singleton.stage.stageHeight; 

     _helpMc.addChild(_loader.content); 
     _helpMc.addChild(_exitButton); 
     addChild(_helpMc); 
     setChildIndex(_helpMc, numChildren - 1); 

     _helpLoader.removeEventListener(Event.COMPLETE, showHelp); 
    } 

    private function closeHelp(evt:MouseEvent):void 
    { 
     removeChild(_helpMc); 
    } 
} 

回答

0

你可以刪除/卸載加載論文幫助外部SWF裝載機..

addChild(yourloader)  //adds the loader 
removeChild(yourloader) // removes your loader 

另外,如果您使用數組來存儲電影(SWFS),則可以清除array.lenght = 0; 可能一個循環函數會更合適。

var len:int = TempSWFS.length; 
    for(var i:int = 0; i < len; i++) { 
    if(TempSWFS[i] != null && TempSWFS[i].parent != null){ 
     TempSWFS[i].parent.removeChild(TempSWFS[i]); 
    } 
+0

'removeChild()'不會刪除該對象。它只「隱藏」它(從顯示列表中刪除)。它仍然繼續播放,發出聲音,等等。 – strah

+0

我試過使用'unload()'和'unloadAndStop()'應該照顧它,沒有成功。我在想,@Mike在他的上述評論中說過,如果這是真的,可能可以解釋爲什麼我現在沒有嘗試任何工作。 – hRdCoder

1

我認爲你遇到的問題是孤兒swfs。所以當swf被加載時,它會被顯示,但是當你準備移動到下一個swf時(至少不能正確卸載),它不會被卸載...

如果你想維護這種技術,你需要確保您在完成使用後卸載swf(正確,無泄漏)。

在我的遊戲,一般的指示屏幕不是那麼重,我會想加載和卸載SWF的,所以我不知道你的情況,而是一個建議,我會做的是:

負荷所有您的swfs和遊戲之前顯示的信息(preloader階段) 然後根據需要顯示遊戲或隱藏相應的幫助剪輯。

IE:

  • 有加載你的遊戲指令SWF文件一起預加載。
  • 擁有preloader提供了一個參考加載的指令swfs到遊戲
  • 有遊戲存儲在某些數組/矢量中的引用。
  • 如果用戶點擊幫助按鈕,顯示該第一指令SWF,並設置一些「currentClip」變量設置爲指向所述第一指令瑞士法郎
  • 如果用戶點擊關閉按鈕,隱藏「currentClip」
  • 如果用戶點擊下一條指令/ Prev指令,隱藏currentClip,顯示下/ Prev指令SWF,並重新初始化currentClip變量顯示加載...

如果你能提供一些來源,我大概可以幫助你更有效。

0

好吧,我解決了它。我所做的是我創建了引用每個SWF文件的對象,並將它們全部引入到一個數組中,以及一個跟蹤應該加載SWF的引用變量。該參考變量跟蹤玩家所在遊戲的當前區域,因此當玩家點擊幫助按鈕時,右側的SWF將被加載並顯示給他們,然後當他們單擊退出時可以直接回到遊戲。

謝謝大家對我的幫助。

+0

另外,如果你使用數組來存儲電影(SWFS),你可以清除數組,我已經建議,好你解決了它 – joshua

+0

這可能會工作,但如果我理解正確,我會清理並重新創建數組單擊幫助按鈕的時間,那麼通過在程序啓動時立即加載所有內容並在使用時加載/卸載文件,可以使此方法更高效一些? – hRdCoder

+0

我建議當添加項目到階段推(intoArray)如果你刪除這個,它不會從內存中刪除只是引用,如果你刪除了loaders.info數組,那麼你將需要加載,所以有兩個數組一個爲裝載機和另一個當你添加到舞臺 – joshua

相關問題