技术与热点应用 您所在的位置:电子展览网 > 行业资讯 > 技术与热点应用 > 手机设计与制造

Symbian C++ 游戏开发要领




关键词:

  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

第1页 第2页 第3页 

  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

第1页 第2页 第3页 

  接上页

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的位图!

  2.5 其他硬件限制

  - 处理器的能力不是很强,图形处理器很少

  - 算术处理器也少,最好不要用浮点运算,用整型代替。相似的,避免使用64位的整数。因为他们都要影响run-time的性能和内存消耗的开销

  - 一些设备上只有有限的屏幕解析度,大小和色深

第1页 第2页 第3页 

  接上页

  - 只能手机上的键盘的数目也是有限的

  2.6 应用程序开发:开发工具和过程

  N/A

  3. S60 应用程序框架

  S60的UI框架("Avkon")扩展了Symbian OS的应用程序框架(“Uikon")。典型的有如下几个部分组成:Application,Application Document, Application UI, Application View。

  通常游戏程序还会有个game engine。通常的建议是要把game的逻辑和UI显示相分离,以便于从用,但是他们之间还是存在一定的耦合,因为UI要接受和相应用户的输入。

  对于有多个screen的游戏有两种方法来做,第一就是用多个view来显示,第二是用一个view。后者如果game有很多的screen的话就会要设计一个复杂的状态机。通常我们会把游戏划分成多个逻辑上的view。

第1页 第2页 第3页 

分享到:
收藏 打印
相关新闻
  • 没有相关信息!