0

私は単純な 2D トップダウン サバイバル ゲームを持っています。プレーヤーは単純に「逃げる」必要があります。各ラウンドで 30 秒間、画面上の敵と衝突しないでください。

レベルが上がるたびに、各敵の数が増えます。

問題

私の敵のタイプの 1 つは、プレイヤーが特定の距離に近づくまで探索/スリープ状態になり、その後、追跡状態になり、ラウンドが終了するまでそのままになります。

一度に画面に表示される敵が約 30 人しかいない初期のラウンドでは、すべての動作が正常に機能します。しかし、敵の数が約 60+ になると、この特定の敵がプレイヤーをしばらく追いかけているように見え、その後、睡眠状態に戻るように見えます。

public override void Update(SpriteManager inManager)
{
    this.spriteRectangle.X = (int)position.X;
    this.spriteRectangle.Y = (int)position.Y;

        if (this.collisionRectangle.Intersects(inManager.player.spriteRectangle))
            this.spriteState = SpriteState.Chasing;

        if (this.spriteState == SpriteState.Chasing)
        {
            CheckForPlayer(inManager);
            if (this.spriteRectangle.Intersects(inManager.player.spriteRectangle))
            {
                inManager.player.spriteState = SpriteState.Dead;   
            }
        }


    base.Update(inManager);
}
private void CheckForPlayer(SpriteManager inManager)
{
    if (this.position.X > inManager.player.position.X)
       this.position.X -= X_SPEED;
    else
        this.position.X += X_SPEED;

    if (this.position.Y > inManager.player.position.Y)
        this.position.Y -= Y_SPEED;
    else
        this.position.Y += Y_SPEED;
}

なぜこの問題が発生していると思うのか、誰かに光を当てることはできますか?私の唯一の考えは、スプライトが高い場合 (最大 108)、おそらく全員がプレーヤーをチェックする時間がないということです。私には意味がありません。

乾杯

4

1 に答える 1

1

完全なコードがないとわかりにくいですが、どこかの小さな間違いだと思います。デバッグして、状態がChasing変化したかどうか、または実際に状態が変化したかどうかを確認する必要があります。また、特定の量のオブジェクトでラグの問題が発生したこともある (おそらく問題ではない) ため、それも可能性があります。

于 2013-04-14T23:22:10.960 に答える