Actionscript 3 Enter Frame在tweeling时无法精确检测hitTestObject

Actionscript 3 Enter Frame在tweeling时无法精确检测hitTestObject,actionscript-3,collision-detection,enterframeevent,Actionscript 3,Collision Detection,Enterframeevent,我有一个运行Enter_Frame的函数,并在函数运行期间将其设置为tween。我知道你可以用object.y=object.y+1来代替我现在用的TweenLite。但是TweenLite提供了我想要的最佳效果。我现在的问题是,我想删除enter_frame函数,因为它不会相互冲突。但是当我跟踪hitTestObject时,它就像一瞬间,hitTestObject结果返回'false'。因此,tweening不能真正第一个完成,并在对象仍在碰撞时提前删除enter_frame run priv

我有一个运行Enter_Frame的函数,并在函数运行期间将其设置为tween。我知道你可以用object.y=object.y+1来代替我现在用的TweenLite。但是TweenLite提供了我想要的最佳效果。我现在的问题是,我想删除enter_frame函数,因为它不会相互冲突。但是当我跟踪hitTestObject时,它就像一瞬间,hitTestObject结果返回'false'。因此,tweening不能真正第一个完成,并在对象仍在碰撞时提前删除enter_frame run

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]));
                }
            }
        }
私有函数检查冲突(e:事件):无效
{
//检测阵列中的冲突
对于(var j:uint=0;j
您的问题是,直到调用checkCollision方法后0.2秒,这两个过程才结束

如果您在ENTER_框架中调用此方法,您将不断覆盖现有的tweens。想想看,输入帧调用checkCollisions,checkCollisions将启动一些tweens,在tweens有时间完成之前,下一个输入帧将启动,再次调用checkCollisions并在相同对象上启动tweens,因为tweens尚未完成对象的重新定位

最好不要使用ENTER_FRAME-运行checkCollisions,为相交对象启动tweens,如果存在相交对象,则在0.2秒后再次调用chechCollisions(一旦tweens完成)

私有函数检查冲突(e:事件):无效
{
var collisionsDetected:布尔值=false;
//检测阵列中的冲突
对于(var j:uint=0;j
Thanx。它起作用了。但是动画在进入帧条件下显示得最好,所以我将帧速率更改为0。但是在“CollisionsDetected”条件完美运行的情况下,我可以在冲突结束后运行另一个函数。
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);
        }