-1

以下は、オブジェクトがステージに追加され、新しく追加されたオブジェクトが以前のオブジェクトとオーバーラップしているかどうかを確認するためのコードです。問題は、プレーヤーが移動しているときに、ランダムなオブジェクトが常に生成されるため、ステージ上のオブジェクトがランダムに移動することです。これは、エンター フレーム タイマーで呼び出されます。

if(onStageCount < 15){
        var Square:MovieClip;
        Square = new mcSquare();
        Square.x = Math.random() * 1000 + ((Math.abs(_boundaries.x) + (stage.stageWidth)));
        Square.y = Math.random() * stage.stageHeight/2.5 + (stage.stageHeight/2.5);
        ObjectArray.push(Square);
        onStageCount += 1;
    }
    for (var i in ObjectArray){
        for (var a in ObjectArray){
            if(ObjectArray[i].hitTestObject(ObjectArray[a]) && a != i){ChildrenColliding = true;}
            while(ChildrenColliding){
            ObjectArray[i].x += (ObjectArray[a].width + 75);
            ObjectArray[i].y += (ObjectArray[a].height + 40);
            ChildrenColliding = false;
                if(ObjectArray[a].hitTestObject(ObjectArray[i]) && a != i){ChildrenColliding = true;}
            }
        }
        _boundaries.addChild(ObjectArray[i]);
    }
4

1 に答える 1

1

このコードは、呼び出されるたびに 1 つのプラットフォームを生成します。複数を一度に (つまり、1 つのタイマー イベントで) 表示したい場合はif、先頭の を に変更できますwhile。これにより、関数が呼び出されるたびに 15 になるまでプラットフォームが生成されます。

プラットフォームが配置されるたびに、考えられるすべての衝突をチェックする必要はありません。既に存在するもので問題ありません。for ... in1 つのループだけを使用して、各オブジェクトをテストし、必要に応じSquareて移動することができますSquare。これにより、プラットフォームの生成中にオブジェクトが「ランダムに移動」するのを防ぐことができます。ただし、特定の量だけ相殺するのではなく、最初と同じ方法で位置を再生成する方がよい場合があります。

画面上にいくつかのプラットフォームを生成する最も簡単な方法は、最初にプラットフォームを生成するときに異なる範囲の x 値を使用することです。また、通常どおり生成し、ゲームの開始時にある程度前方に移動することもできます。ただし、多くのアプローチがあり、ゲーム全体がどのように機能するかを確認しないと、どれが最適かを判断するのは困難です。

于 2012-06-05T19:35:27.367 に答える