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

確かに最善の方法ではありませんが、機能するはずのもう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 に答える