2010-08-19 60 views
0

我有一個運行Enter_Frame的函數,並在函數執行期間讓它補間。我知道你可以使用object.y = object.y + 1而不是我現在使用的TweenLite。但TweenLite提供了我想要的最佳效果。我現在的問題是,我想在不碰撞對方時刪除enter_frame函數。但是當我追蹤hitTestObject時,它有一秒鐘的hitTestObject結果返回'false'。所以補間不能真正完成1st,並且在對象仍然發生碰撞時儘早移除enter_frame run。輸入幀在tweenling時沒有精確檢測到hitTestObject

private function checkCollision (e:Event):void 
     { 
      //detect collision in array 
      for (var j:uint = 0; j < collisionArray.length - 1; j++) 
      { 
       for (var k:uint = j + 1; k < collisionArray.length; k++) 
       { 
        if (collisionArray[j].hitTestObject(collisionArray[k])) 
        { 
         //do something 
         TweenLite.to (objectA,0.2,{y:move2Y}); 
         TweenLite.to (objectB,0.2,{y:move3Y}); 
        } 
        trace (collisionArray[j].hitTestObject(collisionArray[k])); 
       } 
      } 
     } 

回答

0

你的問題是,充斥着沒有完成,直到checkCollision方法後0.2秒被調用。

如果您在ENTER_FRAME中調用此方法,您將不斷覆蓋現有補間。想一想 - ENTER_FRAME調用checkCollisions,checkCollisions將在補間有時間完成之前啓動一些補間,下一個ENTER_FRAME激發,再次調用checkCollisions並在同一對象上啓動補間,因爲補間尚未完成重新定位物件呢。

你最好的選擇可能是不使用ENTER_FRAME在所有 - 運行checkCollisions,開始充斥着相交的對象,如果有相交的對象,然後調用chechCollisions再次0.2秒後(一旦補間完成)

private function checkCollision (e:Event):void 
     { 
      var collisionsDetected:Boolean = false; 
      //detect collision in array 
      for (var j:uint = 0; j < collisionArray.length - 1; j++) 
      { 
       for (var k:uint = j + 1; k < collisionArray.length; k++) 
       { 
        if (collisionArray[j].hitTestObject(collisionArray[k])) 
        { 
         //do something 
         TweenLite.to (objectA,0.2,{y:move2Y}); 
         TweenLite.to (objectB,0.2,{y:move3Y}); 
         collisionsDetected = true; 
        } 
        trace (collisionArray[j].hitTestObject(collisionArray[k])); 
       } 
      } 

      //you might want to make the timeout a little longer than 200ms, 
      //to make sure that the tweens have completed when it fires. 
      //you can figure out the best delay based on your framerate 
      if(collisionsDetected) setTimeout(checkCollision, 250); 
     } 
+0

感謝名單。有用。但動畫在Enter_Frame條件下顯示效果最好,因此我將幀速率更改爲0.但是,在「碰撞檢測」條件完美運行後,我可以設法在碰撞結束後運行另一個函數。 – Hwang 2010-08-20 03:36:41