簡體   English   中英

奇數抽獎行為

[英]Odd draw behavior

在我的xna游戲中,我有一種方法可以在地圖上的隨機位置創建寶藏。 問題是,它們將它們全部吸引到了同一位置。 隨機變量不會為v3點生成唯一的隨機數。 但是,如果我調試並逐步執行該方法,則它可以完美運行。

void CreateTreasure()
    {
        for (int i = 0; i < 20; i++)
        {
            Random random = new Random();
            Treasure t = new Treasure(new Vector3((float)random.Next(0, 600), 0, (float)random.Next(600)));
            treasureList.Add(t);
        }
    }

在抽獎中我循環通過

foreach (Treasure t in treasureList)
        {
            DrawModel(treasure, Matrix.Identity * Matrix.CreateScale(0.02f) * Matrix.CreateTranslation(t.Position));
            PositionOnMap(ref t.Position);
        }

PositionOnMap只是獲取位置並調整Y以使模型位於高度圖上。 有什么想法嗎?

在循環外部創建隨機變量,僅在內部使用next,還對初始化程序使用隨機種子,例如:

var random = new Random(Guid.NewGuid().GetHashCode());

您需要將“隨機”移出循環。 現在,它將每次創建一個新的Random實例。 由於默認種子是基於時間的,因此如果這種情況很快發生,則對Next()的第一次調用將始終返回相同的值。 嘗試這個:

void CreateTreasure()
{
    // Just move this outside, so each .Next call is on the same instance...
    Random random = new Random();
    for (int i = 0; i < 20; i++)
    {
        Treasure t = new Treasure(new Vector3((float)random.Next(0, 600), 0, (float)random.Next(600)));
        treasureList.Add(t);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM