首先,我们介绍如何自定义WTK模拟器,因为默认的WTK模拟器总是有不尽如人意之处,比如,DefaultPhone的全屏高度就不是正好的320的高度,而是因为在界面顶端放置了一个标题,导致全屏高度总会小于320,因此,我们需要消除这种问题,让我们的屏幕呈现正好的240*320的尺寸。或者遇到其它一些问题的时候,我们都可以打开C:\WTK2.5.2\wtklib\devices\下相对应模拟器的文件夹下面的配置文件“*.properties”进行修改,里面的具体参数我就不一一解释,你可以看里面的英文注释。为了节约你的时间,也让你可以偷懒,你可以到我的工程站点http://code.google.com/p/cyclone2d/downloads/list里面找到“WTK自定义模拟器”,下载后解压到“C:\WTK2.5.2\wtklib\devices\”目录,这样,你就多了一个自己定义的模拟器了,你可以从Eclipse里面重新搜索并发现它。
对于你现在已经存在的J2me工程,如果需要使用这个模拟器的话,我们还需要在设置一下,工程名上右击-属性->Java ME,然后在选中活动的Configuration,点击右侧的Edit,进行如下配置,即选择我们刚才搜索到的模拟器。
接下来,我们介绍另外一种J2me模拟器,叫KEmulator,它不是Sun的产品,但是完全可以用作我们开发时使用,我们几乎可以不使用WTK来进行开发,只有在遇到某些特殊情况(比如打包)的时候,才会需要使用WTK。
首先,从C2D工程站点下载“KEmulator”,下载之后解压,放置的路径最好不要含有中文。我的路径是“E:\GameProjects\Tool\KEmulator”,接下来,我们学习如何使用。
新建一个Java工程,New->JavaProject
然后在工程上右击->New->SourceFolder,填入res,新建一个res文件夹
接下来,为我们的Java工程引入KE的库,在工程名右击->Properties->Java Builder Path,选择Libraries选项卡,点选“Add External Jars”,然后找到并加入我们解压目录下的“Kemulator.jar”文件,如图:
接着把我们的源码和目录从J2me工程拷贝过来,放在该工程相应目录下。
现在,我们可以来运行当前的工程了。打开Run->RunConfigurations,在Java Application上面双击,在Main选项卡进行如下配置:
别着急Run,还需要在Arguments界面做如下配置:
其中必须的两条语句,一条指定了class path,默认是工程下面的bin目录,另外一个指定启动Midlet。如上设置完毕之后,我们可以点击Run,会看到如下画面:
至此,KEmulator配置完毕。KE提供了WTK所不具有的一些性能统计、内存监视等对开发非常有帮助的功能,能用好这个模拟器对J2me开发会有很大帮助。
通过前面的例程,我们会发现如果我们的开发过程如果兼顾Android和J2me的时候,我们需要建立多个工程,当我们针对同一平台的不同机型时,很可能我们还需要分出更多的工程来,这样我们将会面对N多的工程,代码的维护、bug的修改、产品的升级,将会变成一场灾难,我们会被淹没在各种工程中间。我们必须解决这种问题。
首先,我们应该尽量减少工程的出现,将能够放在一起的代码全部放在一起,能够放在一起的资源也全部都放在一起。接下来,我介绍如果只维护一个资源文件夹以及一个代码文件夹的情况下,我们能够做到兼顾的Android和J2me平台的开发,甚至使用同样这套代码即可应对多个机型甚至渠道的发布问题。
因为我们知道如果想在Eclipse里面把资源打包到Android的应用程序APK文件中的话,我们必须把资源放在Android工程的Assets文件夹中,然而代码我们就可以不用一定要放在Android工程下面了。另外因为引擎代码一般我们也不会修改,因此我们应该把它跟我们的具体项目代码分开,免得他被随便改掉。我们针对公司的所有游戏项目维护一套引擎的话,有利于技术累积、避免重复开发以及规范化,我们来演示一下操作过程。
首先,建立一个文件夹用来存放引擎源码,比如我放在“E:\EngineProjects\Engine\C2D_Com\C2D_Com_Engine \sourcecode\engine”,接着,我们再建立一个文件夹,用来存放当前项目代码,如我放在“E:\EngineProjects\Engine\C2D_Com\C2D_Com_Engine\sourcecode\example”,然后,我们把Android工程下的src删掉,保留Asstes,我们把资源放它里面。然后,我们将源码从外面链接到工程里面,右键点击工程名>Properties->Java Build Path,在Source选项卡,我们点击“Link Source”,然后选择我们引擎源码的目录,自己定义一个顶级包名(即在打包后不存在的最顶层的文件夹名称),
这样,所有engine下面的代码将出现在现在的工程里面,就跟出现在src里面的效果是一样的。我们现在不需要src,汇集各方代码自然形成了src。接着,我们就是将项目代码使用同样的方式链接进来,最终如图:
这样,我们就是在Android工程下面的所有代码都是来自于外部了。
接着,我们对J2me工程使用类的操作,删掉src和res,引入外部代码,然后不同的是,将Android工程下的Assets目录链接到当前的J2me下面作为res,如图:
这个时候,如果你的代码报错了,就Clean一下,Antenna会自动重新转换你的代码,让它适应成J2me的版本。
当然,如果这时候你的Android工程是开着的,你会发现Android工程下的代码会报错,因为你们现在共享着同一套代码,在J2me工程里面它被改动了。所以这个时候你最好是同时只开着一个工程,关掉另外所有的共享代码的工程。因为其实你也没有必要同时开着很多工程。当需要另外工程的时候,再切换过去,Clean一下就好了。
现在你的工程已经实现共享代码了,也实现共享资源了。我们把KE工程也如此设置
当然也要给KE工程加上Antenna预处理。
好了,至此,我们已经可以任意打开一个工程,然后Clean就可以获得该平台下的编辑环境了,而且代码的改动会同时反馈到其它所有的工程。当然,对于不同的平台,你需要小心地加上预处理参数以面报错。还好的是C2D引擎已经封装了大部分功能平台相关的内容,你几乎不太会用到跟平台相关的API,除非你决定不用Java了。
(想看清晰版本,到我的工程网址去下载吧http://code.google.com/p/cyclone2d/)