惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - JulioZou

读书:《Joel软件随想录》——“囚徒的困境”! 《XNA高级编程:Xbox 360和Windows》5-1 《XNA高级编程:Xbox 360和Windows》4-7 《XNA高级编程:Xbox 360和Windows》4-6 《XNA高级编程:Xbox 360和Windows》4-5 《XNA高级编程:Xbox 360和Windows》4-4 《XNA高级编程:Xbox 360和Windows》4-3 《XNA高级编程:Xbox 360和Windows》4-2 《XNA高级编程:Xbox 360和Windows》4-1 《XNA高级编程:Xbox 360和Windows》3-10 《XNA高级编程:Xbox 360和Windows》3-9 《XNA高级编程:Xbox 360和Windows》3-8 《XNA高级编程:Xbox 360和Windows》3-7 《XNA高级编程:Xbox 360和Windows》3-6 《XNA高级编程:Xbox 360和Windows》3-4 《XNA高级编程:Xbox 360和Windows》3-3 《XNA高级编程:Xbox 360和Windows》3-2 《XNA高级编程:Xbox 360和Windows》3-1 《XNA高级编程:Xbox 360和Windows》2-6/2-7
《XNA高级编程:Xbox 360和Windows》3-5
JulioZou · 2009-01-28 · via 博客园 - JulioZou

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

图3-8

     可以看到这个类的方法都很简单,花几分钟就可以写出这个类。但这个类非常有用,使用内部的Random类的静态实例globalRandomGeneratorRandomHelper类在生成随机数的时候比每次需要随机数都创建一个新的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方法返回的是不是一个二维向量,基本上不会出错。