2

これに関するヘルプや洞察をいただければ幸いです。まだC#の初心者なので、ご容赦ください。これが私の問題です:

List<Vector2> vectorList = new List<Vector2>();

for (int i = 0; i < 5; i++)
{
    Vector2 tempVector = new Vector2(i, i);
    vectorList.Add(tempVector);
}

これはうまくいきます。得られる出力は、(0, 0)、(1, 1)、(2, 2) などの値を持つ 5 つのベクトルです。

ランダムな位置を取得する必要があるため、RandomizePosition() という小さな関数を自分で作成しました。

for (int i = 0; i < 5; i++)
{
    Vector2 tempVector = RandomizePosition();
    vectorList.Add(tempVector);
}

これから得られる出力は、すべて同じ位置を含む 5 つのベクトルです。参照の問題があるか、関数が一度だけ呼び出されるか、何かが発生していると思います。奇妙なことは、デバッグモードで各ループを実行すると、出力が期待どおりになり、X と Y の値が異なる 5 つのベクトルになるため、関数に問題はないと思います。(または、おそらくそうですが、その内部のランダム化ロジックではありません)。

なぜこれが起こっているのかについてのアイデアと、これを修正する方法についての洞察はありますか? ループから関数を呼び出すことはできませんか? または、各反復で関数が確実に呼び出されるようにするにはどうすればよいですか? ありがとう!

RandomizePosition() 関数が役立つ場合は、次のとおりです。

private Vector2 RandomizePosition()
{
   Random rand = new Random();

   int seedX = rand.Next(1, 14);
   int seedY = rand.Next(1, 14);

   int posX = 32;
   int posY = 32;

   if (seedX != 1)
       posX += seedX * 64;

   if (seedY != 1)
       posY += seedY * 64;

   return new Vector2(posX, posY);
}
4

2 に答える 2

1

このように rand 変数を宣言しましたが、これRandom rand = new Random();は行うべきではありません。rand 変数を静的なものにして、メソッドではなくクラスで宣言します。そのとき、そのような問題は発生しません。

于 2013-06-08T06:03:38.253 に答える