首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >补间时,Enter Frame不能准确检测hitTestObject

补间时,Enter Frame不能准确检测hitTestObject
EN

Stack Overflow用户
提问于 2010-08-19 19:13:29
回答 1查看 820关注 0票数 0

我有一个带有Enter_Frame的函数正在运行,并在函数期间将其补间。我知道您可以使用object.y=object.y +1而不是我现在使用的TweenLite。但是TweenLite提供了我想要的最好的效果。我现在的问题是,我想在enter_frame函数彼此不冲突的时候删除它。但是当我跟踪hitTestObject时,它就像是瞬间hitTestObject结果返回'false‘。因此补间不能真正先完成,并在对象仍在碰撞时提早删除enter_frame run。

代码语言:javascript
运行
复制
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]));
                }
            }
        }
EN

Stack Overflow用户

回答已采纳

发布于 2010-08-20 05:37:46

您的问题是补间直到调用checkCollision方法后0.2秒才结束。

如果在ENTER_FRAME中调用此方法,将不断覆盖现有补间。想想看- ENTER_FRAME调用checkCollisions,checkCollisions将启动一些补间,在补间完成之前,下一个ENTER_FRAME将触发,再次调用checkCollisions,并在相同的对象上启动补间,因为补间还没有完成对象的重新定位。

最好的办法可能是根本不使用ENTER_FRAME -运行checkCollisions,启动补间用于相交对象,如果有相交对象,则在0.2秒后再次调用chechCollisions (补间完成后)

代码语言:javascript
运行
复制
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
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3521157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档