2016-07-14 63 views
1

我需要的答案似乎應該是一個非常明顯的問題,但我無法在任何地方找到它:Flash AS3 |刪除或停止功能

如何停止Flash AS3中的函數?對於基本示例,當我按下按鈕時,該功能開始工作。當我再次按下按鈕時,功能停止。

更具體地說,我該如何定製這個if/boolean(或類似的)語句,以便當/當變量爲真時,函數開始工作。一旦變量變爲false,該功能將停止。當它再次成真時,這個過程會重複。

正在討論的代碼是另一個用戶幫助爲我創建的平移功能。

 if(Zoomed == true) { 
       MovieClip.y = stage.stageHeight/2; 
       MovieClip.x = stage.stageWidth/2; 
       addEventListener(MouseEvent.MOUSE_MOVE, panFunction); 
       function panFunction(me: MouseEvent): void { 
        MovieClip.x = stage.stageWidth/2 - (stage.mouseX - stage.stageWidth/2); 
        MovieClip.y = stage.stageHeight/2 - (stage.mouseY - stage.stageHeight/2); 
       } 

} 

正如你所看到的,我希望它這樣,當布爾函數「已縮放」是真實的,功能激活和平移功能的工作方式。問題是,當我回到Zoomed == false時,該函數仍在運行。我正在尋找如何阻止這種情況的發生。我試過'while'循環,但它最終只是凍結動畫(可能是因爲它是一個運動圖像,它試圖渲染每一幀與此代碼)。

總結:我需要一種方法可以打開和關閉功能。或者,能夠添加並在需要/不需要時刪除它應該工作相同。任何幫助,這將是一個很大的幫助,謝謝!

+0

你確定放大會失敗嗎?你可以交易放大的價值來確定嗎? –

+0

*跟蹤值 –

+1

也不要將函數定義放在if塊中。只需將函數放在其他函數所在的位置,並在該塊內部調用它。這可能會解決你的問題。 –

回答

3

當你不再想要平移時,你需要做的是移除事件監聽器。

事情是這樣的,它假設你改變一個點擊的zoomed值:

var zoomed:Boolean = false; //a var to store whether we are currently zoomed 

//change the zoom on mouse click 
addEventListener(MouseEvent.CLICK, zoomClick); 

function panFunction(me:MouseEvent): void { 
    mc.x = stage.stageWidth/2 - (stage.mouseX - stage.stageWidth/2); 
    mc.y = stage.stageHeight/2 - (stage.mouseY - stage.stageHeight/2); 
} 

function zoomClick(me:MouseEvent):void { 
    zoomed = !zoomed; //toggle the zoomed value 

    if(zoomed){ 
     //we're zoomed, so add the panning mouse move listener 
     addEventListener(MouseEvent.MOUSE_MOVE, panFunction); 
     //do whatever else you need to when first zoomed. 
    }else{ 
     //no longer zoomed, remove the mouse move listener 
     removeEventListener(MouseEvent.MOUSE_MOVE, panFunction); 
    } 
} 

的一些注意事項,字MovieClip是不是一個好的實例名稱,因爲它可能會發生衝突類名MovieClip,我'd建議將其重命名爲mc或其他內容,以避免以後出現潛在問題。

另外,避免內聯函數(在其他函數中聲明/包含的函數),它們在連接到事件監聽器時尤其有問題,並且是將內存泄漏引入程序的好方法。

+0

爲了將功能綁定到布爾變量(如問題所述),創建一個'set'和一個'get''函數',它可以讓你只要布爾變量設置爲新值,就自動執行上述代碼中的最後一個「if/else」 – null

+0

完美工作!非常感謝。我已經完成了這個工作,所以當它從pan函數中點擊'取消縮放'時,它會重新定位到原來的位置。到底是什麼,非常感謝你。 – Jrex