2012-04-23 3 views
1

私はC#とXNAのWindows Phone用の2次元サイドスクロール(kinda)ゲームを作成しています。ランダムに敵を産卵するXNA 4.0(WP7)

私はスプライトが動いているように見えるキャラクターアニメーションを持っていますが、背景と敵は動く唯一のものです。 私は敵のテクスチャをロードしています。画面上の位置は静的であるため、問題ありません。 しかし、私の問題は、これらの敵をランダムな間隔で生成したいということです。 私は、乱数ジェネレータ、intといくつかのTimeSpan変数を設定しました。

ここでは、UpdateEnemiesメソッドに配置したコードを示します。

:アップデートでは、私は敵の産卵がランダムではないと私はここでの問題を抱えていUpdateEnemies(gameTime);

random = new Random(); 
spawnSeconds = random.Next(1, 6); 
enemySpawnTime = TimeSpan.FromSeconds(spawnSeconds); 
if (gameTime.TotalGameTime - previousSpawnTime > enemySpawnTime) 
{ 
    previousSpawnTime = gameTime.TotalGameTime; 
    // Add an Enemy 
    AddEnemy(); 
} 

を呼び出しています。その特定の実行のために同じ間隔で生成されます。

私はブレークポイントを使用しましたが、毎回spawnSecondsenemySpawnTimeはうまく更新されますが、この問題はまだあります。

ご協力いただければ幸いです。

+0

私はあなたのspawnSeconds + enemySpawnTimeをスポーン条件の内側に置くことでより良いことを示唆し、次にランダムを1回だけ設定します。そうでなければ、それを各フレームと呼びます。 – BugFinder

+1

プライベートランダムrand =新しいRandom(); –

+0

lukas - 私はそれをランダムなランダムとして一番上に設定していますが、そこで初期化できないので、現在、initializeメソッドでそれをやっています。 @BugFinder - どういう意味ですか? – UserBruiser

答えて

2

UpdateEnemiesがすべてのUpdate()で呼び出されると仮定すると、すべてのUpdate()でenemySpawnTimeが変更されますが、これは意味をなさないことです。あなたはそれを変更する必要があるときに敵スポーン、すなわち:

if (gameTime.TotalGameTime - previousSpawnTime > enemySpawnTime) 
{ 
    // Add an Enemy 
    AddEnemy(); 

    // Update the time left next enemy spawn 
    previousSpawnTime = gameTime.TotalGameTime; 
    var spawnSeconds = random.Next(1, 6); // random should be a member of the class 
    enemySpawnTime = TimeSpan.FromSeconds(spawnSeconds); 
} 

そして、前述のように、唯一の初期化()、例えば、一回ランダム()オブジェクトを作成し、そのクラスのメンバにします。

+0

ハ、私はまったく同じことを書いた。あなたの答えを最初に読んでいるはずです。私は本当にこれが問題だと思います。 – scottheckel

+0

私はあなたを愛していますDr_Asik! – UserBruiser

2

ランダム=新しいランダム();

更新機能を呼び出すたびに、ランダムの新しいインスタンスを作成しています。 これを実行すると、ランダム関数は同じシードを基にしているため同じ値を生成します。

あなたのコンストラクタで、あなたのUpdate関数の外であなたのランダムオブジェクトをインスタンス化してください。これにより、コードが改善され、問題が解決されます。

+0

クイック返信ありがとう random =新しいRandom()を更新から削除し、initializeメソッドに配置しました。それでも同じ問題があります。 – UserBruiser