2012-05-28 53 views
1

我真的已經在這個小問題上嘗試了我最艱難的,它已經2周長的夜晚,我知道你有一個更有經驗的AS3開發人員會在一分鐘內修復或者兩個,我希望。removeEventListener從一個函數,不工作,試了一切(我認爲)

所以我有一個非常簡單的遊戲,拖拽能夠使用MOUSEUP的動畫對象,然後點擊主題並製作另一個動畫(圖示或其他)。只在影片剪輯內的一幀上進行hitTest。 (這工作正常)

我有問題,刪除說eventListener,我試圖在動畫結束時刪除它,所以在最後從動畫那裏會說AS從舞臺removeEventListener,但這並沒有工作,所以我在動態地將動畫添加到舞臺後嘗試removeEventListener,仍然沒有喜悅。

我希望這是簡單的像this.removeEventListener或currentTarget,但唉。

我真的想不出別的什麼,

對於愛的AS請幫助。 解釋也將是驚人的我瞭解人們沒有時間如此真的任何輸入將不勝感激。

下面是我的AS,如果有人想看FLA,我可以發送它,我很酷分享。

NB它可能是相當明顯的,我是新手,請幫我對我的方式....

import flash.display.MovieClip; 

import flash.events.*; 

var test:dart = new dart(); 
addChild(test); 
circle.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag); 

function fl_ClickToDrag(event:MouseEvent):void 
{ 
    circle.startDrag(); 
} 

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop); 

function fl_ReleaseToDrop(event:MouseEvent):void 
{ 
    circle.stopDrag(); 
    addEventListener(Event.ENTER_FRAME, checkIfHitTest); 
    function checkIfHitTest(Event) 
    { 

     if (circle.hitTestObject(square)) 
     { 
      trace("true, the circle and square are colliding"); 
      var s:blood_splat = new blood_splat(); 
      addChild(s); 
      s.x = mouseX; 
      s.y = mouseY; 
      **removeEventListener(Event.ENTER_FRAME,checkIfHitTest);** 

     } 
     else 
     { 
      trace("false, the circle and square are not colliding"); 
      var s:blood_splat = new blood_splat(); 
      addChild(s); 
      s.x = mouseX; 
      s.y = mouseY; 
      s.alpha = 0.1; 
      **removeEventListener(Event.ENTER_FRAME,checkIfHitTest);** 
     } 
    } 

} 
+0

只是提供一些輔助建議,我相信艾米在下面的正確軌道上。還有一點建議,在OOP語言中,使用大寫來啓動類名稱和使用camelCase來定義變量實例是很常見的。所以例如var test:Dart = new Dart();這使得在使用類與對象的實例相比時,它更具可讀性和顯而易見性。也可以通過這種方式來查看Flash CSXX的文檔類,這樣您就可以封裝這些代碼,並且具有更清晰的範圍,而不僅僅是將代碼放入時間軸中。另外,您從未嘗試過任何有無限間接性的東西:) – shaunhusain

+0

另一種通用編碼建議,使用更長的變量名稱,我們在大多數不錯的IDE中具有製表符完成的優點,最好是在代碼中更加明確,並使其可讀性高於需要解釋它的評論。 – shaunhusain

+0

感謝您的建議,我會嘗試開始在課堂上獲得我的AS,它看起來像一個很好和有組織的方式,我有點困惑與私人,公共和靜態類,並試圖達到電影剪輯裏面的容器內的影片剪輯在舞臺上,我只用了5-6周的時間,而且我總是感覺不到自己的深度。在嘗試所有的事情時,我應該說「我已經嘗試了我所知道的一切,希望有人能夠幫助」。 – johnp

回答

1

只是做:

Event.currentTarget.removeEventListener(Event.type, checkIfHitTest) 
+0

很可能在他們調用removeEventListener時,這是指函數fl_ReleaseToDrop。 –

+0

嗨mgraph,感謝您的建議,但不幸的是它給了我一個錯誤,說 – johnp

+0

ReferenceError:錯誤#1069:屬性ENTER_FRAME沒有在flash.events.Event上找到,並且沒有默認值。 \t at MethodInfo-8() – johnp

1

嘗試定義fl_ReleaseToDrop之外checkIfHitTest。從理論上講,你所做的工作應該是可行的,因爲你的removeEventListener代碼也在fl_ReleaseToDrop的關閉中運行,但是它的定義可能被忽略,因爲你不應該在其他函數中定義命名函數。

另一個可能的問題是,您將checkIfHitTest的參數與Class,Event的名稱相同,因此您的定義有衝突 - 您的事件實例沒有一個常量ENTER_FRAME。

老實說,即使你顯然有嚴格的模式關閉,或者你會看到大量的編譯錯誤,我無法想象你沒有得到運行時錯誤。您是否安裝了調試播放器?你真的應該嚴格打字 - 它會給你反饋,至少開始自己解決很多這些問題。

+0

非常感謝您的建議Amy我會嘗試將hitTest置於室外。不完全確定如何做到這一點,但我相信我可以最終弄清楚。我將嚴格模式,並嘗試調試,我不知道它是誠實的,我假設它默認關閉。 – johnp

相關問題