Learning XNA 3.0 第七章 第二节
来源:互联网 发布:淘宝怎么打快递单 编辑:程序博客网 时间:2024/06/03 16:28
随机生成各种精灵
为了随机生成各种精灵, 你首先得确定每个种类出现的概率。这个游戏里的大部分精灵都将是AutomatedSprites。ChasingSprites是第二多的,而EvadingSprites只是偶尔路过……这一节,我们将会给各种精灵出现的概率赋一个百分比的值。每次有一个精灵重生的时候,你都要基于各种精灵出现的概率来判断生成何种精灵。每种精灵具体的概率该是啥样的呢?就是你可以用这些概率来测试游戏,而且你还可以调整他们的值,让开发者感觉哎哟不错哦~(这句话翻了好久,不知道怎么表达,原句是:The exact percentage likelihood for each sprite type is something that you can play with as you test your game, and you can adjust the values to the point where they feel right to you, the developer.)
首先,打开SpriteManage类,添加三个新的类级别的变量来表现各种精灵出现的概率。
int likelihoodAutomated = 75;
int likelihoodChasing = 20;
int likelihoodEvading = 5;
你会发现这三个概率加起来等于100(相当于100%)。本质上来说就是,75%是AutomatedSprites,20%是ChasingSprites,5%是EvadingSprites。
现在,你要添加一些代码。这些代码会生成一个随机数,然后,根据这个随机数的值,来生成三种精灵中的一种。打开SpriteManage类,用下面的代码调用SpriteList.Add方法,这些代码放在SpawnEnemy方法的尾部。
spriteList.Add(
new EvadingSprite (Game.Content.Load<Texture2D>(@"images/skullball"),
position, new Point(75, 75), 10, new Point(0, 0),
new Point(6, 8), speed, "skullcollision", this, .75f, 150, 0));
还有以下的代码:
// Get random number
int random = ((Game1)Game).rnd.Next(100);
if (random < likelihoodAutomated)
{
// Create AutomatedSprite
122 | Chapter 7: Putting It All Together
spriteList.Add(
new AutomatedSprite(Game.Content.Load<Texture2D>(@"images/skullball"),
position, new Point(75, 75), 10, new Point(0,0), new Point(6, 8),
speed, "skullcollision", 0));
}
else if (random < likelihoodAutomated +
likelihoodChasing)
{
// Create ChasingSprite
spriteList.Add(
new ChasingSprite(Game.Content.Load<Texture2D>(@"images/skullball"),
position, new Point(75, 75), 10, new Point(0,0), new Point(6, 8),
speed, "skullcollision", this, 0)); }
else
{
// Create EvadingSprite
spriteList.Add(
new EvadingSprite(Game.Content.Load<Texture2D>(@"images/skullball"),
position, new Point(75, 75), 10, new Point(0, 0), new Point(6, 8),
speed, "skullcollision", this, .75f, 150, 0));
}
这段代码生成一个0-99的随机数,然后拿这个数跟表示AutomatedSprites出现的概率的变量比较,如果这个数小于这个变量,则生成AutomatedSprites。如果不小于,则和AutomatedSprites和ChasingSprites两种概率的和比较大小。如果小于,则生成ChasingSprites,如果不小于,则生成EvadingSprites。
如果你觉得这个说不通的话,你可以这么理解:取出这个例子那些变量的值,随机数(就是在0-99之间的那个数)首先被拿来判断是否小于75。如果小于,一个AutomatedSprites将被创建。这就说明了,有75%的概率会创建一个AutomatedSprites对象,这也正是你想要的。如果随机数大于75,那就再看看这个随机数是否小于95(即,AutomatedSprites的概率—75%与ChasingSprites的概率—20%的和)。因为如果随机数小于75的话,就绝对不会进行后面这个比较,偶尔还会比较一下这个值是否处于75和94之间(这个也就是ChasingSprites出现的概率,20%,再次强调一下,这正是你想要的概率)。最终,如果以上的情况都不为真的话,一个EvadingSprites对象将会被创建,换句话说,如果随机数是94-99之间的话,正好是你想要的5%的概率。
咩哈哈,咱们走一个~编译然后运行游戏,你应该会注意到大部分生成的都是AutomatedSprites,还夹杂着一些ChasingSprites,偶尔还能看见打酱油的EvadingSprites路过……太给力啦~
现在问题是,游戏到了这个地步,虽然不同种类的精灵有着不同的行为,但是他们看起来却是一样的。这不仅会让游戏变得无聊,也会让玩家感到疑惑——长得相似的物体不是应该做一些相似的事情吗?所以,你需要为每个不同种类的精灵写一些区别……
- Learning XNA 3.0 第七章 第二节
- Learning XNA 3.0翻译连载
- Learning XNA 3.0翻译连载--第1章 起步
- Learning XNA 3.0翻译连载--序言
- Learning XNA 3.0翻译连载--第2章 精灵的乐趣(1)
- Learning XNA 3.0翻译连载--第2章 精灵的乐趣(2)
- 第二章 第七节 绘制options screen
- spring实战 第七章第二节
- 第二章第七题
- 第二章第七题
- 第二章第七题
- 第二章第七题
- 第七章第二题
- 开始翻译Learning XNA 3.0(author:Aaron Reed)
- Learning Opencv第二章
- 第七颗头骨 第二章
- 第二章习题第七题
- Learning Opencv第二章(2)
- Refactoring: write code that humans can understand
- How many pieces of land?
- 也做个努力的妈妈:)
- JS的Slice函数
- Oracle创建用户、表空间、导入导出、...命令
- Learning XNA 3.0 第七章 第二节
- ADO Insert Performance Issue
- 配置SharePoint Server 2010爬网大小写敏感的知识库
- OpenCV繪圖的實作-cvCircle,cvEllipse,cvEllipseBox
- com技术内幕读书笔记1
- 一个软件工程师的告白
- 素书全文
- ks全自动安装centos
- [Oracle] 判断表是否存在