0

大学の学期 1 の宿題として、単純な XNA ゲームを開発しています。ただし、敵のスプライトの描画ループで少し壁にぶつかりました。私が知る限り、敵のスプライトはすべて game1.cs クラスのリストに追加されていますが、リストの最初のスプライトのみが描画されています。

このメソッドは、敵のインスタンスをリストに追加します。Spawn は update メソッドで 1 秒ごとにインクリメントされます。これにより、敵が 4 体出現するまで毎秒順番に出現します。

public void LoadEnemies()
    {
        int randX = rand.Next(0, 1000);
        int randY = rand.Next(0, 500);

        if (spawn >= 1)
        {
            spawn = 0;

            if (enemyList.Count() < 4)
            {
                enemyList.Add(new NM_Enemy(Content.Load<Texture2D>("Wisp1"), new Vector2(randX, randY)));
                enemyList.Add(new NM_Enemy(Content.Load<Texture2D>("Wisp2"), new Vector2(randX, randY)));
                enemyList.Add(new NM_Enemy(Content.Load<Texture2D>("Wisp3"), new Vector2(randX, randY)));
                enemyList.Add(new NM_Enemy(Content.Load<Texture2D>("Wisp4"), new Vector2(randX, randY)));
            } 
        }

        //Checks if enemies in the list have left the level bounds
        for (int i = 0; i < enemyList.Count; i++)
        {
            if (!enemyList[i].isVisible)
            {
                enemyList.RemoveAt(i);
                i--;
            }
        }
    }

Draw メソッド

foreach (NM_Enemy enemy in enemyList)
                    {
                        enemy.Draw(gameTime, spriteBatch);
                    }

Update メソッド

foreach (NM_Enemy enemy in enemyList)
                {
                    enemy.Update(gameTime);
                }
4

1 に答える 1

0

投稿したコード スニペットとプログラムの説明が正確に一致しません。あなたが言った

敵は 4 体出現するまで毎秒順番に出現しますが、実際に起こっていることは、敵が 4 体未満の場合、一度に 4 体が出現するということです。また、それらはすべて、その間に(randX, randY)呼び出すことなくスポーンされています。つまり、4 人の敵がまったく同じ位置にいることを意味します。rand.Next()これは、1 つしか表示されていない理由を説明している可能性があります。それらはすべて互いに重なっています。この行にブレークポイントを設定してみてください

enemy.Draw(gameTime, spriteBatch);

そして敵の位置を確認します。おそらく、それらはすべて同じ場所にあることがわかります。確かに、行内の と の値を手動で入力した値と交換してrandXrandYそれらenemyList.Add()の位置が異なることを確認してから、それらがどこに描画されるかを確認してください。

于 2013-02-05T09:01:26.423 に答える