0

オブジェクトが空から落ちてきて、プレイヤーがそれらをクリックして破壊する必要があるフラッシュ ゲームを作成しています。しかし、私には問題があります。時々、お互いの上にスポーンします。これが私が意味する例です:

間違ったスポーン

オブジェクトは他のオブジェクトの近くにスポーンする必要がありますが、互いに重なってはいけません。

これが私の定数変数です:

public static const GRAVITY:Number = 3;
public static const HIT_TOLERANCE:Number = 50;  

//Powerup
public static const APPLE_END_Y:Number = 640;
public static const APPLE_SPAWN_CHANCE:Number = 0.02; //per frame per second
public static const APPLE_START_Y:Number = 110;
public static const APPLE_SPAWN_START_X:Number = 50;
public static const APPLE_SPAWN_END_X:Number = 500;

//Scoring
public static const PLAYER_START_SCORE:Number = 0;
public static const SCORE_PER_APPLE:Number = 10;

オブジェクトがスポーンするコードの一部を次に示します。

private function update(evt:Event)
{

    //Spawn new apples
    if (Math.random() < randomChance)
    {
        //spawn x  coordinates
        var newPirmas = new Pirmas();
        newPirmas.x = Math.random() * C.APPLE_SPAWN_END_X + C.APPLE_SPAWN_START_X;
        var newAntras = new Antras();
        newAntras.x = Math.random() * C.APPLE_SPAWN_END_X + C.APPLE_SPAWN_START_X;
        var newTrecias = new Trecias();
        newTrecias.x = Math.random() * C.APPLE_SPAWN_END_X + C.APPLE_SPAWN_START_X;
        var newApple = new Apple();
        newApple.x = Math.random() * C.APPLE_SPAWN_END_X + C.APPLE_SPAWN_START_X;
        //spawn y coordinates
        newPirmas.y = C.APPLE_START_Y;
        newAntras.y = C.APPLE_START_Y;
        newTrecias.y = C.APPLE_START_Y;
        newApple.y = C.APPLE_START_Y;

        newPirmas.addEventListener(MouseEvent.CLICK, onClick);
        newAntras.addEventListener(MouseEvent.CLICK, onClick);
        newTrecias.addEventListener(MouseEvent.CLICK, onClick);
        newApple.addEventListener(MouseEvent.CLICK, onClick);

        itemsToSpawn.push(newPirmas, newAntras, newTrecias, newApple);
    }   
}        

誰かが言ったように:As for making sure they don't overlap, you can keep a history of their spawn points, and change how you get their random X value. Just iterate through the array of previous X values, and make sure the new one isn't within (oldX + (width/2)).

しかし、私はそれを成功させることができません。スポーン ポイントの履歴を保持するのを手伝ってくれませんか? どうもありがとうございました。

4

1 に答える 1