我有一个带有Enter_Frame的函数正在运行,并在函数期间将其补间。我知道您可以使用object.y=object.y +1而不是我现在使用的TweenLite。但是TweenLite提供了我想要的最好的效果。我现在的问题是,我想在enter_frame函数彼此不冲突的时候删除它。但是当我跟踪hitTestObject时,它就像是瞬间hitTestObject结果返回'false‘。因此补间不能真正先完成,并在对象仍在碰撞时提早删除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]));
                }
            }
        }发布于 2010-08-20 05:37:46
您的问题是补间直到调用checkCollision方法后0.2秒才结束。
如果在ENTER_FRAME中调用此方法,将不断覆盖现有补间。想想看- ENTER_FRAME调用checkCollisions,checkCollisions将启动一些补间,在补间完成之前,下一个ENTER_FRAME将触发,再次调用checkCollisions,并在相同的对象上启动补间,因为补间还没有完成对象的重新定位。
最好的办法可能是根本不使用ENTER_FRAME -运行checkCollisions,启动补间用于相交对象,如果有相交对象,则在0.2秒后再次调用chechCollisions (补间完成后)
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);
        }https://stackoverflow.com/questions/3521157
复制相似问题