0

我有碰撞代码,可以检测我是否撞到了许多墙壁,但是当我移动到另一个框架时,即使我的墙壁被移除,它就像碰撞仍然存在。

我想如果我在进入下一帧时以某种方式停止代码,它可能会有所帮助。

我也是这方面的新手。

这是我的代码。

function myHitTest(obj:DisplayObject, arr:Array):Boolean {

    for (var i:int = 0; i < arr.length; ++i) {
    //for (var item:DisplayObject in arr) {
        var item:DisplayObject = arr[i]
        if (obj.hitTestObject(item)) {
            return true;
        }
    }

    return false;
}

var everywall:Array = [w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14,w15,w16];
4

2 回答 2

2

你可以作弊,而且只是 st everywall = [];。这将不再检查与 16 面墙中的任何一个的碰撞。

但这并没有解决主要问题。在这种情况下,重要的是仍有东西myHitTest在召唤。无论调用什么循环都需要退出,或者任何回调调用它都需要重构。如果您需要的不仅仅是这些提示,请提供更多代码。

于 2012-04-20T20:08:12.930 回答
1

我确定也不是最好的方法但应该起作用的另一个选项是在检查您所在的帧之前添加一个 if 语句。类似于以下内容:

function myHitTest(obj:DisplayObject, arr:Array):Boolean {  

    // Check to see if the frame is the one I want the code to run on (1)
    if(currentFrame == 1) {

        for (var i:int = 0; i < arr.length; ++i) {  
        //for (var item:DisplayObject in arr) {  
            var item:DisplayObject = arr[i]  
            if (obj.hitTestObject(item)) {  
                return true;  
            }  
        }  
    }
    return false;  
}  

currentFrame是一个关键字,如果您正在寻找根的 currentFrame,您可以使用它。如果你想要一个特定的MovieClip,你可以使用MovieClip.currentFrame. 将 ==1 更改为 == 您希望在其上运行的任何帧。

于 2012-04-20T22:01:13.967 回答