Symbian C++游戏编程 (一)

Posted on 2010-06-07 15:28 Learn 阅读(138) 评论(0)  编辑 收藏 引用

1. 介绍
1.1 S60平台的游戏编程
随着S60设备硬件的提高,在其上运行高质量的有些成为了可能。当然也同时存在一些挑战的地方就是游戏需要适应许多不同屏幕的能力。另外还有一些其他的限制如下:
- 被来电或是短信中断
- 限制电池的使用,要处理突然断电的情况
- 内存大小受限
- 显示屏幕和键盘大小的限制
- 相对于PC而言有限的CPU处理能力
1.2 Purpose and scope
N/A


2. S60 Platform-Specific Considerations
2.1 被系统事件中断
当一个游戏在运行的时候,如果系统事件发生了,用户应该被通知到。所以开发人员需要考虑到游戏被中断的情况。

所有的系统端事件都有这样的一个通用性质,那就是可以被一个应用程序所捕获。
当一个系统事件发生时,最前面的应用程序会失去焦点。这会导致该应用程序user interface类(CAknAppUi)的HandleForegroundEventL函数被调用。如果不考虑处理这个函数,应用程序可以处理相关的动作,如暂停程序。

2.2 电池耗尽和供电失败
应用程序需要注意电池的消耗。如果一个时间段没有任何操作的话,应该进入休眠模式从而节约用电。如果一个游戏暂停了,那么所有的timer和loops应该停止。如果在一个特定的时间段内,没有任何操作的话,系统的定时器会触发一个时间,应用程序可以通过RTimer::Inactivity方法来获得。

为了处理突然掉电的情况,一个游戏应该每隔一个时间保存一下数据,以便在重启的时候恢复,至少应该保存两份数据,因为很可能在你保存数据的时候会掉电。

2.3 Screen Resolution
S60手机有不同的屏幕分辨率。S60的UI库,Avkon能支持不同的屏幕分辨率,然而通常情况下,游戏里面的控件都是自己描画的,所以需要我们自己根据不同的屏幕分辨率来调整,而不能hard-code。

2.4 Memory
在S60第三版之前的许多S60设备上最多只有8MB的内存。虽然S60第三版的设备的RAM要多些,但是相对于PC设备来说还是很少的,所以内存管理是非常重要的。

除了RAM外,设备还有ROM来存储那些预安装的软件,一个用户数据区域来存储已经安装的应用程序和系统中可写的和连续的数据。

应用程序需要注意内存的节约,这不仅包括在运行时内存的使用,还包括编译后代码的大小,总之,在处理RAM使用中最重要的一条原则就是,我们应该尽早的释放这些已分配的内存,每一步都要提醒自己这样做了吗。
在模拟器上,Symbian OS提供了一个宏,如果在程序退出的时候没有释放掉分配的内存,那么这个宏会panic掉应用程序。在目标机器上,OS上的核心会保持跟踪每个线程的内存,并且在程序退出后可以重新释放它们。这就保证了当一个应用程序退出后,所有的内存都会被释放掉。如果他们没有被正确的释放掉应有资源,那结果是一定数量的资源会被保存在系统中。

Symbian OS中,每个线程都有它自己的内存堆栈,在线程已经运行时,这个堆栈大小是不可以被改变的。在S60中缺省的堆栈大小仅有8KB,所以在使用时要格外的小心。项目的栈大小可以通过在mmp文件中修改epocstacksize这个标记位设定。

这里要注意的是,在模拟器上运行时,是没有这个堆栈大小限制的,因为它是根据Windows来运行的,这就是程序每个步骤都应该在硬件(手机)上试试。大部分的堆栈溢出是由堆栈里使用大栈描述符所引起的,这种情况可以通过在堆上分配描述符来避免。注意递归的使用是很耗费内存的,如果递归程序是不可避免的,那我们每次传入的参数以及部分变量都应该最小化,以防止溢出。

为了减少编译后代码的大小,我们应该遵循如下的方针:)
1、除非必要,否则不要导出method
2、不要生成没有必要的虚函数(有附加的虚函数表,增加了体积)
3、不要过分的使用TRAP捕捉陷阱
4、避免复制代码
5、找到可以分解的函数
6、使用一般的控制和组件


对TRAP宏的使用要小心,并不是说避免过度使用他们是因为他们会增长代码大小。在Symbian os中由应用程序框架已经提供了不少的TRAP,我们没有必要在到处放置我们自己的TRAP了:)

在游戏中,因为会大量使用位图,所以对内存的消耗特别大,最有效的方法不是减少位图的使用,而是降低他们的颜色深度(colour depth)Symbian支持24位位图,一共可以处理16777216种颜色,但实际的色彩大小是根据硬件来说的,我们应该尽量以目标硬件所能支持的色彩量为限度,举例来说,一个sprite,使用8bit colour就应该能满足大部分sprite的需要了,而mask更应该只使用1bit的位图!

 

川大科技园职业技能培训学院(3G嵌入式技术创新中心)

咨询热线:400-702-8828  028-6862 6028

联系人:欧老师    联系方式QQ:928077186

网址:http://www.ctic.cc   

地址:四川省成都市科华北路47号(川大科技大厦)2楼

posts - 41, comments - 14, trackbacks - 0, articles - 2

Copyright © Learn