Symbian多平台游戏引擎VS开发入門
在VS里建立了一个新项目,以S60 Simple Hello World Application为模板。向导自动生成了一些基本文件,可以在S60的SDK下编译运行了。唯一的一个.h文件里声明了Application、Document、AppUi、Container四个类,这也是symbian推荐的结构我没有修改这个结构,.cpp文件里是对这四个类的实现,另一个在group里的.cpp文件里包含了程序所需要的3个UID。
为了能适应多个版本的SYMBIAN系统,我通过在mmp文件里添加MACRO项来让编译器选择不同的代码,当然也可以在VS中操作,在“项目”-》“属性”-》“C/C++”-》“预处理器”-》“预处理器定义”里添加需要在编译时使用的宏定义,你可以为不同的SDK设置不同的宏,比如我可以使用SERIES60、SERIES80、SERIES90、UIQ来区分不同的SDK版本。
把这个项目用S80的SDK编译,出错了。S60用的是AVCON,S80用的是EICON(好象是),所以不能通用,现在预定义的宏作用来了,通过不同的预定义宏来使用不同的UI类保证了源代码的通用性。S60的Application继承自CAknApplication,Document继承自CAknDocument,AppUi继承自CAknAppUi;S80、S90、UIQ的Application继承自CEikApplication,Document继承自CEikDocument,AppUi继承自CEikAppUi。S60使用了aknappui.h,aknapp.h,akndoc.h,avkon.lib,而S80要包含eikappui.h,eikapp.h,eikdoc.h而且不需要avkon.lib。用预定义的宏让编译器在选择不同的SDK时包含不同的头文件继承不同的基类,现在终于能够在S60,S80,UIQ(S90还没测试)上编译通过并运行。
在Container的构造器里添加SetExtentToWholeScreen();让窗口全屏。在UIQ中好象要把***.uid.cpp文件中的内容注释掉才能编译通过,不然会报UID重定义,要用#ifndef|#endif包起来。
简单的跨版本代码出来了,以后往里面添砖加瓦基本就采用这种方式了。