2010-08-19 57 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