- 注册时间
- 2007-11-2
- 最后登录
- 2007-11-3
③业余
- 积分
- 141
|

楼主 |
发表于 2007-11-3 11:18:04
|
显示全部楼层
今天我们来看一下Marblets的场景
Screen是这个游戏所有场景的基类,继承自DrawableGameComponent(GameComponent). 我们来看一下场景和DrawableGameComponent之间的关系.
场景我觉得可以用电视里面的一个镜头来形容,包含了背景,音乐,人物等各元素,当然其中这些元素也都是可有可无的.
DrawableGameComponent是一个资源的集合,它可以组成一个游戏中的场景,有它自己的方法和事件,比较适合封装游戏中一个独立的个体.
一个DrawableGameComponent可以是一个场景,但一个场景却不一定只是一个DrawableGameComponent,它可以是多个,通过Visible、DrawOrder、OnDrawOrderChanged
和OnVisibleChanged等方法属性,构成一个多层次,丰富效果的场景。
讨论完了DrawableGameComponent我们继续来看代码.
1.Screen.cs
    Screen.cs封装了一个基本的场景,它包括了两个必要元素:背景图和背景音乐.
    然后,通过OnVisibleChanged事件来自己的状态,来确定是否被表示或者被隐藏,并根据自己的状态来播放或停止背景音乐,以及绘图.
2.TitleScreen.cs    
    TitleScreen是我们游戏开始后看到的第一个场景,当然了,它继承自Screen,也就必须得保持它有一个背景图以及一首背景音乐.
    在它的Update函数里面,它不停的检测是否按下了A键,如果被按下,则说明游戏者有意开始玩游戏,返回GameState.Play2D回去,否则返回GameState.None,主程序接收到返回值后,再根据返回值决定是否要切换场景了.
    Draw则显示高分榜数据.
3.GameScreen.cs
    GameScreen也相对简单,把游戏的重要处理都丢给了GameBoard,自己则只是简单的显示一下分数.
    在这里我们可以看到GameBoard也是继承自DrawableGameComponent,就像我上面所说的那样,这个游戏场景是由GameScreen和GameBoard两部分组成,各司其职.
4.TutorialGameBoard.cs
    TutorialGameBoard继承自GameBoard,它主要是增加了一个方法,每隔五秒钟判断一下有没有空位,如果有的话,就在每行最后一个空位补上一个球.大家可以打开GameScreen.cs,注掉第一行看一下效果.
    大家一定很奇怪吧,还没有看到GameBoard,为什么它的子类反尔先看了呢?
    呵呵,不好意思,先道个歉,第一篇列提纲的时候,我没有认真的读代码,错误的以为这个类是实现游戏DEMO的,不过,一来这个类简单,二来游戏DEMO的思路也正和这个扩充一模一样,那我就将错就错的继承讨论下去了.
    一个好的游戏,能够让玩家在一分钟之内知道游戏的玩法(或者最起码知道基本的操作,快捷键之类的留给高手慢慢发觉吧)无疑能提高了玩家对游戏的亲近感.这也是我特别喜欢玩Popcap公司游戏的原因,这个导读完了之后,我还打算拿他们的一个游戏出来,从零开始模仿一个出来,也做为个菜鸟学习教程.
    
    知道游戏怎么玩,好的方法之一就是DEMO了,让电脑自己去玩一回,和TutorialGameBoard这个类一样,只要设置一个时间时隔,去寻找最合适的爆破位置去爆炸,这样一个简单的DEMO就完成了! |
|