Zune上的Pong
马上就要找工作了(不知谁会要我...),在我学生时代的最后一个暑假里,看书、做题、写code、看奥运、玩实况足球...一个都不能少。同时,作为一个好奇心旺盛的家伙,加上刚入手个4G Flash版的Zune 2,自然要拿XNA 3.0 CTP来玩玩。
闲话不表,XNA 3.0 CTP开始支持在Zune上开发游戏(可以结合免费的Visual C# 2008 Express来用),可是文档还不齐全,官方只放出了个Alien Game的sample,是一个蛮简单的射击游戏。我花了点时间把它的源码读了一遍,发现它所用到的整体架构和在PC上写游戏时用的XNA Framwork几乎如出一辙,推测是其一个子集而已(比如input不支持keyboard,也完全不支持3D加速等等),实际上,在Zune上写的游戏代码只需要修改一些设备相关的输入处理、文件读写的代码就可以直接移植到PC甚至是xbox360上,Zune和xbox360甚至还共用相同的一个GamePad类接口,只不过做了个键映射,不知道3.0正式release的时候会不会有专门对应Zune Pad的一个输入类。然后我又花了几小时在上面尝试写了个小游戏Pong。Pong是世界上最早的video game之一,但不是第一个(via)。Youtube上还可以找到最早的Atari Pong的游戏视频和广告。
在写这个小游戏时,整体感觉用XNA开发游戏的确是非常简单,程序员的主要工作是实现4个函数,Initialize()用来初始化游戏环境;LoadContent()在游戏开始前用于载入资源;UnloadContent()在游戏结束后释放资源;然后就是两个非常重要的函数Update()和Draw(),顾名思义,Update()函数根据玩家的输入更新游戏的逻辑和屏幕上要绘制对象的各种参数,然后交给Draw()函数一股脑画出来,这两个函数在游戏进行过程中循环被调用,周而复始,驱动整个游戏。
非常值得一提的是Alien Game sample中实现的一个ScreenManager机制,它把游戏中需要绘制的内容抽象成一个个GameScreen对象,每个GameScreen对象都有自己的Update()和Draw()函数,ScreenManager用一个List<GameScreen>来管理它们,最顶层的GameScreen处于List的尾部。每个时间周期,ScreenManager都会从List的尾部到头依次调用GameScreen的Update()函数,这样可以让输入处理的逻辑从位于上层的GameScreen一层层传递下来,实际上在大多数情况下,只有最上层的GameScreen需要处理输入。然后它会从List的头部到尾依次调用GameScreen的Draw()函数,从而自下而上把整个游戏界面绘制出来。
在Deploy到Zune上时,发现会拷入名为mscorlib3_5.dll和System.Xml.dll这样的文件,看来Zune上的XNA运行环境是.NET 3.5的一个子集,难道Zune的操作系统是Windows CE一族派生出来的?从运行情况上看,速度不错,还支持联机debug和设置断点,微软在这一点上一直做得很令人满意:)
美中不足的是,在调试代码时没有像Windows Mobile SDK里的模拟器可以使用的,我索性直接在一个Windows Game项目中把所有代码和逻辑都调试好后再一次性导入到Zune项目中;而且在正常退出一个游戏时,整个Zune会重启,官方上说这是by design,因为这样of course可以把所有资源都释放干净。。。毕竟是小小一个Zune而不是iPhone,勉强接受吧。。。sample中没有涉及使用Zune上的WiFi和其他设备通信的源码,假如正式版中支持使用WiFi通信的话,我想可以做更多更有趣的游戏!
下面上图:
1. 随手设计的游戏图标,板子、小球、一局9分,Pong最鲜明的3个特征:)
![]()
在Deploy了XNA之后,Zune就会出现games这个新的菜单项,进入就可以看到已经下载的游戏
2. 游戏主菜单,我采用Zune横放的操作方式,背景和菜单都复用了Alien Game里面的素材
3. 游戏画面,用方向键控制板子(Zune Pad太敏感了,所以我只用按键)
4. 两段实际游戏视频,因为边玩边拍的缘故,玩得都很烂。。。如果戴上耳机的话,小球的反弹和得分失分都有不同的音效,而且还可以一边玩游戏一边听歌的(很流畅),在暂停菜单中还可以更换歌曲(抄袭自Alien Game,这里还有个bug,遇上中文歌名就会crash)。在录像中我尝试用一个很老的电脑音箱把声音放出来,可惜声音还是太小了点。
http://www.youku.com/playlist_show/id_2164628.html
源码释出在:http://iamyuan.cn/downloads/zunegames.rar(大量借鉴自Alien Game sample,写得不好,见笑了,小球反弹用的是最简单的反射。。。)
现在掌机市场基本上被$ony的PSP和任天堂的NDS占领(我有个PSP 2000,可以用第三方逆向工程出来的build chain tool在上头写程序),不知道微软让XNA支持Zune是不是也想涉足掌机这个庞大的消费市场。我认为目前市场上这两个巨头的成功都建立在每个平台上都有非常好玩的独占游戏这一基础上(我就是因为怪物猎人和实况足球这两款游戏而购买了PSP),假如微软能通过一些手段激励开发者在Zune上开发出真正吸引人的大作,这个平台火起来也不是不可能的,当然作为一个游戏机,Zune在硬件上比如屏幕和控制方式也要做相应的改进才行。
从下面这张拍摄自北京奥运会的照片看,NDS还是蛮有人玩的,没准他们几个就在用wifi连马里奥赛车吧,呵呵

欢迎交流
posted on 2008-08-18 23:53:49 by cy 评论(0) 阅读(3885)