关于手机游戏嵌入式开发程序移植的建议
http://tech.ddvip.com 2008年06月17日 社区交流
本文详细介绍关于手机游戏嵌入式开发程序移植的建议
都是我在以前工作中总结的一些经验,可能对刚刚从事类似工作的朋友会有点儿用处,内容不多,绝对原创,呵呵…
游戏移植建议(Symbian)
希望提供需求及设计文档
希望原始游戏可以提供需求及设计文档。虽然大部分游戏功能可以在运行时看到,但通过需求文档的话可以更全面的了解游戏的功能(尤其是在某些特定条件下被触发的事件)。通过比较详细的设计文档,结合代码中的注释在阅读程序时可以更快速的掌握游戏逻辑的结构。这里主要需要类之间的关系(继承,聚合,依赖等)图和一些关键部分的顺序图或状态图,而且同类游戏只需一个就可以。
希望注意数组及结构的赋值方式
如果在Symbian程序中出现类似这样的代码:
MGS_POINT pos[3]=即数组中的某一元素与其它元素存在依赖关系,那么Symbian程序在编译的时候会出现问题(可能Symbian程序编译时对数组的赋值顺序比较特别)。因此希望其他系统的程序员最好能写成:
{
{0,(shell->GetScreenHeight()-selH)/2},
{shell->GetScreenWidth()-selW,pos[0].y},
{(shell->GetScreenWidth()-selW)/2,MENU_TOP_SELECT_Y},
}
MGS_POINT pos[3]的方式。同样,对结构的赋值也与此类似。
pos[0].x=0
pos[0].y=(shell->GetScreenHeight()-selH)/2
pos[1].x=shell->GetScreenWidth()-selW
pos[1].y=pos[0].y
pos[2].x=(shell->GetScreenWidth()-selW)/2
pos[2].y=MENU_TOP_SELECT_Y
建议统一Shell类中的接口名称。
在不同系统的CSystemShell中,有一些功能类似的接口在名称上不同。如PlaySound()和PlayMidea()等。如果所有平台能统一起来,在项目互相移植时可以省却许多不必要的麻烦。
游戏消息处理方式的差异。
在游戏开发里,一般当游戏(逻辑)要执行一些系统功能时,需要调用SystemShell类来和操作系统打交道。同样,当操作系统有一些消息(如按键,来电)要告诉游戏时,也需要调用SystemShell类来通知游戏。在具体实现时,不同的操作系统可能有一些差异,如:
消息处理函数 调用位置
Symbian Shell->OnKeyDown( ) CxxxxAppUi::HandleKeyEventL( )
Shell->OnBreak( ) CxxxxAppUi::HandleForegroundEventL()
Shell->Init( ) CxxxxAppUi::ConstructL()
Brew Shell->OnKeyDown( ) xxxx_HandleEvent(…AEEEvent eCode,…)
switch (eCode) EVT_KEY
Shell->OnBreak( ) xxxx_HandleEvent(…AEEEvent eCode,…)
switch (eCode) EVT_APP_SUSPEND
Game-〉OnGameStart() xxxx_HandleEvent(…AEEEvent eCode,…)
switch (eCode) EVT_APP_START
注:在Symbian中,Game-〉OnGameStart()可以在Shell->Init( )中调用。
在Brew里,xxxx_HandleEvent()函数在xxxx.cpp(xxxx为项目名)文件里。
Symbian中RGB颜色的存储方式
在Symbain中,RGB颜色的实际存储方式实际上是BRG顺序。如红色实际上保存为0x0000FF而非0x00FF0000。所以如果有其他平台用到Symbian中的颜色的话,请注意转换。
在保存UTF8文档时,注意把“Add a Unicode Signature(BOM)”选项去掉,否则在文档开始的地方会有乱码(JAVA程序可能不需要)。
Symbian程序退出时习惯使用右软键,其它系统可能不一样(如使用”C”键)。所以当在不同平台上有些功能键的使用习惯不一致时,请注意调整相应的键位。
责编:豆豆技术应用