zoukankan      html  css  js  c++  java
  • 《XNA高级编程:Xbox 360和Windows》35

    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方法返回的是不是一个二维向量,基本上不会出错。
  • 相关阅读:
    html实现打印预览效果
    layui-table 对表格数据进行处理之后的排序问题
    layui-table与layui-rate评分转换成星级的使用
    使用apache的poi来实现数据导出到excel的功能——方式二
    java获取配置文件中的key=value值
    layDate——设置最大日期不能超过当前日期
    layDate——初步使用
    echarts使用——柱状图
    layui内部定义的function,外部调用时候,提示某函数未定义现象解决方案
    layui table异步调用数据的时候,数据展示不出来现象解决方案
  • 原文地址:https://www.cnblogs.com/AlexCheng/p/2120332.html
Copyright © 2011-2022 走看看