2015-02-24 38 views
0

我在這個問題上花了14個小時。這是一個基本的碰撞檢查器,可以在發生碰撞時設置MovieClip動畫播放。該剪輯是如何停止在Flash CS6 AS3中播放動畫片段(使用Box2D)

currentBallObject.clip。

它的工作原理。剪輯播放。但它一遍又一遍地重複着。

private function checkCollisions():void 
     { 
      var i = balls.length; 
      while (i--) 
      { 
       var currentBallObject = balls[i]; 



       if (currentBallObject.contact) 
       { 

        //condition hits ground 
        if (currentBallObject.ground) 
        { 

        currentBallObject.body.SetPosition(new b2Vec2(currentBallObject.startX/PIXELS_TO_METRE, currentBallObject.startY/PIXELS_TO_METRE)); 
        currentBallObject.body.SetLinearVelocity(new b2Vec2(0, 0)); 
        currentBallObject.body.SetAngularVelocity(0); 

        //currentBallObject.texture.pop();            
        } 
        else // it hit player 
        { 


          // assign clip texture to current position 
          currentBallObject.clip.x = currentBallObject.body.GetPosition().x * PIXELS_TO_METRE; 
          currentBallObject.clip.y = currentBallObject.body.GetPosition().y * PIXELS_TO_METRE; 

          // whisk old object away 
          currentBallObject.body.SetPosition(new b2Vec2(currentBallObject.startX/PIXELS_TO_METRE, currentBallObject.startY/PIXELS_TO_METRE)); 
          currentBallObject.body.SetLinearVelocity(new b2Vec2(0, 0)); 
          currentBallObject.body.SetAngularVelocity(0); 
          currentBallObject.contact = false; 


        } 

       } 
      } 
     } 

我加入這個代碼刪除影片剪輯或以某種方式擺脫它,它已經通過一次打後。 (42幀)。我也嘗試添加一個frameListener和至少一打其他建議。當我添加

stop()

動畫不能播放。它只是加載最後一幀。我現在的代碼是:

private function updateClips():void 
     { 
      var i = balls.length; 
      while (i--) 
      { 
       var currentBallObject = balls[i]; 

       if(currentBallObject.clip) 
       { 


        var frame:int = currentBallObject.clip.currentFrame; 
        //trace(currentBallObject.clip.currentFrame); 
        if(frame == 42) 

         { 

          currentBallObject.clip._visible = false; 
          currentBallObject.clip.removeMovieClip(); 
          currentBallObject.clip.enabled = -1; 



         } 

       } 
      } 
     } 

我試着計算框架,把它一次性執行的功能,架出口聽衆,我的想法。我只是想讓一個MovieClip運行一次。我也嘗試在時間軸上放置stop(),然後動畫不播放。它只是加載最後一幀。

現在碰撞工作,但動畫永遠留在屏幕上,永遠循環。

編輯:我得到了帕特里克的代碼運行沒有錯誤。

我添加事件偵聽器與其他這樣的:

_input = new Input(stage); 
        ... 
        addEventListener(Event.ENTER_FRAME, oEF); 
        addEventListener(Event.ENTER_FRAME, update); 
        time_count.addEventListener(TimerEvent.TIMER, on_time); 
        time_count.start(); 
       } 

然後創建了一個功能:

private function oEF(e:Event):void{ 

      var i = balls.length; 
      while (i--) 
      { 
       var currentBallObject = balls[i]; 



      if (currentBallObject.clip.currentFrame >= currentBallObject.clip.totalFrames) 
      { 
       currentBallObject.clip.stop(); 
       currentBallObject.clip.removeEventListener(Event.ENTER_FRAME, oEF); 
       if (currentBallObject.clip.parent) currentBallObject.clip.parent.removeChild(currentBallObject.clip); 
      } 
     } 
     } 

但我仍然得到同樣的問題,因爲任何其他結果。 MovieClip在聯繫中消失而不會發生動畫。

通過調試我學到了更多。 currentFrame的值從1-40開始,然後在剩下的執行過程中保持在40。 因此,MovieClip始終位於每個對象的最後一幀。

回答

0

if if clip is MovieClip then then you can use clip.totalFrames in an enterframe listener。

function oEF(e:Event):void{ 
    if (this.currentFrame >= this.totalFrames){ 
     this.stop(); 
     this.removeEventListener(Event.ENTER_FRAME, oEF); 
     if (this.parent) this.parent.removeChild(this); 
    } 
} 

this.addEventListener(Event.ENTER_FRAME, oEF); 
+0

謝謝。但我得到這些錯誤。 未定義的方法addEventListener通過ref。靜態類型的類。 訪問未定義的屬性oEF。 正在使用像「lightball.addEventListener(Event.ENTER_FRAME,oEF」 輕球是庫中的剪輯名稱,我不明白如何讓我的剪輯成爲'這個'。 – 2015-02-24 22:31:25

0

我想通了。

if (currentBallObject.clip.currentFrame == currentBallObject.clip.totalFrames) 

        { 
         trace("Frame before kill: ", currentBallObject.clip.currentFrame); 
         currentBallObject.clip.x = 0; 
         currentBallObject.clip.y = 0;        
        } 

上述塊進入右後

變種currentBallObject =球[I];

它檢查動畫片段的最後一幀,然後得到由& clip.y設置clip.x爲0。我找不到任何其他辦法來阻止影片在這種特殊情況下襬脫夾。

相關問題