0

私は学校のプロジェクトのためにdxballのようなゲームをしています。画面上を移動するオブジェクト(ブロック)のスポーンポイントを作成しようとしています。しかし、私の問題は、Blockタイプの2つのオブジェクトを作成すると言うときです。彼らは同じランダムなスポーンロケーションを取得し、常に同じリスポーンロケーションを持ち続けます。だから私はランダム関数を間違ってやっていると思います

public class blocks
{
    public Texture2D texturBlock1;
    public Vector2 hastighet = new Vector2(500.0f, 000.0f);
    public Vector2 position;
    private Random random = new Random();
    private int Screen = new int();




   public blocks(int MaxWith)
   {
       this.position.X = MaxWith+10;
       this.position.Y = random.Next(300);
       Screen = MaxWith;
   }

誰かが私を助けてくれたらいいのにと思います。XNAとC#に関しては、私は真の初心者です。

4

2 に答える 2

5

.NET の Random クラスは通常 System.DateTime をシードとして使用するため、同時に複数のランダムを作成すると、同じシードを取得して同じランダムを生成する傾向があります #.

GUID をシードとして使用するこの静的メソッドを試してください

public static int RandNumber(int low, int high)
{
        Random rndNum = new Random(int.Parse(Guid.NewGuid().ToString().Substring(0, 8), System.Globalization.NumberStyles.HexNumber));
        int rnd = rndNum.Next(low, high);
        return rnd;
}
于 2012-12-09T05:43:12.047 に答える
3

Random問題はおそらく、ブロックごとに新しいオブジェクトを作成することです。それはそれらをすべて同じように初期化するかもしれません(それらにそれらの疑似ランダマイザー関数のために同じシードを与えます)、それはあなたに同じ乱数を与える結果になります。

これを回避する最も簡単な方法は、単にを作成することprivate Random random staticです。その場合、すべてのブロックに対して1つのオブジェクトのみがRandom一緒になり、それらはすべて異なる位置を取得する必要があります。

お役に立てれば!

于 2012-12-09T05:40:58.243 に答える