《XNA進階編程:Xbox 360和Windows》3-5

來源:互聯網
上載者:User
3.5 RandomHelper類

     看一下輔助類中的RandomHelper類,在單一項目中它用得不是很多,但幾乎任何一個遊戲都會需要產生一些隨機數讓遊戲內容看上去沒有太多的周期性,並讓遊戲富於變化。

     在Breakout遊戲中,您就需要一些隨機數,這裡的磚塊(block)就是隨機產生的。第一級的隨機機率是10%,第二級是20%,以此類推,這樣遊戲層級不斷提升,遊戲也就變得更難。當然您可以使用Random類,調用Next方法來產生一個新的隨機數,但如果您想產生一個隨機標準化向量,就得使用下面的代碼:

Random randomGenerator = new Random((int)DateTime.Now.Ticks);
Vector3 randomNormalVector = new Vector3(
            (float)randomGenerator.NextDouble() * 2.0f - 1.0f,
            (float)randomGenerator.NextDouble() * 2.0f - 1.0f,
            (float)randomGenerator.NextDouble() * 2.0f - 1.0f);
randomNormalVector.Normalize();


    
如果不想一次次地重複這段代碼,使用類似RandomHelper的輔助類會很有協助。圖3-8顯示了RandomHelper類的內部結構。

圖3-8

     可以看到這個類的方法都很簡單,花幾分鐘就可以寫出這個類。但這個類非常有用,使用內部的Random類的靜態執行個體globalRandomGenerator,RandomHelper類在產生隨機數的時候比每次需要隨機數都建立一個新的Random執行個體快得多。
產生隨機向量

     下面是RandomHelper類的一個方法,用來獲得二維隨機向量:/// <summary>
/// Get Random Vector2
/// </summary>
/// <param name="min">Minimum for each component</param>
/// <param name="max">Maximum for each component</param>
/// <returns>Vector2</returns>
public static Vector2 GetRandomVector2(float min, float max)
{
    return new Vector2(
        GetRandomFloat(min, max),
        GetRandomFloat(min, max));
} // GetRandomVector2(min, max)


     測試RandomHelper類中的方法沒有太大意義,因為所有的方法傳回值都是隨機數,沒有必要檢查GetRandomVector2方法返回的是不是一個二維向量,基本上不會出錯。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.