都是我在以前工作中总结的一些经验,可能对刚刚从事类似工作的朋友会有点儿用处,内容不多,绝对原创,呵呵…
游戏移植建议(Symbian)
希望提供需求及设计文档 希望原始游戏可以提供需求及设计文档。虽然大部分游戏功能可以在运行时看到,但通过需求文档的话可以更全面的了解游戏的功能(尤其是在某些特定条件下被触发的事件)。通过比较详细的设计文档,结合代码中的注释在阅读程序时可以更快速的掌握游戏逻辑的结构。这里主要需要类之间的关系(继承,聚合,依赖等)图和一些关键部分的顺序图或状态图,而且同类游戏只需一个就可以。
希望注意数组及结构的赋值方式 如果在Symbian程序中出现类似这样的代码: MGS_POINT pos[3]= { {0,(shell->GetScreenHeight()-selH)/2}, {shell->GetScreenWidth()-selW,pos[0].y}, {(shell->GetScreenWidth()-selW)/2,MENU_TOP_SELECT_Y}, } 即数组中的某一元素与其它元素存在依赖关系,那么Symbian程序在编译的时候会出现问题(可能Symbian程序编译时对数组的赋值顺序比较特别)。因此希望其他系统的程序员最好能写成: 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”键)。所以当在不同平台上有些功能键的使用习惯不一致时,请注意调整相应的键位。 <----> |