DoJa平台手机游戏的开拓与移植
副标题#e#
一,DoJa技能简介
简朴的说,DoJa是日本最大的移动通讯公司NTT DoCoMo的专利技能。而i-mode是该公司对付移动通讯2.5G阶段的一种应用模式,这个技能包围许多方面。i-mode初始于1999年,而i-mode与JAVA团结降生的i-appli处事初始于2001年,以JAVA为开拓语言的i-mode被称为DoJa技能,DoJa技能实际上是基于CLDC类型之上的平台技能,与J2ME尺度平台是平行。有独立的API类库。在J2ME尺度平台上开拓的移动通讯措施叫做MIDP措施,切合MIDP1.0或2.0类型。而在DoJa平台上开拓的措施被叫做appli措施。DoJa此刻已经有许多版本。最高版本DoJa4.0。
二,DoJaAPI预览
我们以此刻通用的DoJa2.5版本的API为例,大抵看一下它有哪些特色。
2.5版本包罗下面几个包:
com.nttdocomo.device | 包括了可以节制设备的类,好比camera类 |
com.nttdocomo.io | 包括一些在CLDC的GCF( Generic Connection Framework)框架之下的类 |
com.nttdocomo.lang | 包括语言类 |
com.nttdocomo.net | 包括了用于网络通讯方面的类 |
com.nttdocomo.opt.ui | 包括了一些建设用户界面可选的类 |
com.nttdocomo.opt.ui.j3d | 包括了可建设3D图形的类,也是可选的 |
com.nttdocomo.system | 包括了一些可利用于当地终端成果的类,像操纵手机电话本,收发Email等。 |
com.nttdocomo.ui | 包括了一些用于建设用户界面的类 |
com.nttdocomo.util | 包括一些东西类 |
可以看出DoJaAPI比尺度J2ME越发富厚。一般在开拓和移植进程中,常常碰着的类库就是com.nttdocomo.ui包,所以我们大抵看一下这内里都有哪些类。 这个包中包括了appli措施的进口类, Iapplication类,appli措施的用户界面(GUI)也分高级界面和初级界面,只不外他们的担任干系有些杂乱,好比Component类是界说用于高级界面的抽象类,它有九个子类。包括一些按钮,标签,文本框的一些类。实际上就是一些组件。不是容器类。而Frame类也是一个抽象,意思是可暗示为一个框架或容器。
它的子类有Canvas,Dialog,Panel.个中Dialog和Panel属于高级界面类,而Canvas则用于初级界面。用于显示界面的类叫Display,而它的显示屏幕的要领为setCurrent(Frame f),内里的参数为Frame类工具。说明像Component范例的子类是不能独立显示在界面上的,要通过Frame子类中的高级界面类来填加。也就是必需放在Panel上面,才气被显示出来。
其它的尚有用于绘图的Graphics,Graphics2D,Graphics3D类,认真加载媒体资源的MediaManager类等等。因为类许多,并且成果巨大和强大,就纷歧一先容了,可以参考API文档进一步进修。
三,appli措施开拓
下面我们通过一个小措施来讲授如何开拓一个appli的措施。工欲善其事必先利其器,我们要下载一个DoJa的专用模仿器才行。
亏得DoJa的API文档和模仿器以及利用要领在http://www.doja-developer.net都已经给全了。下载对应DoJa2.5版本的模仿器。名字叫javaappli Development Kit for DoJa-2.5版本为 1.03,然后安装上就可以了。
打开模仿器,会呈现雷同WTK的窗口,差异的是一个手机模仿器的窗口也会一起呈现,并且尚有个呼吁行模式的窗口。
仔细看一下,其实界面成果挺简捷的,菜单栏有文件,工程,编辑,设备,辅佐几个选择,东西栏包罗新建项目,打开项目,ADF设置,建设,运行这些选项。下面尚有一些运行模式的选择。虽然这些项目都是英文的。 什么是ADF设置呢,这里讲一下appli的安装措施也包罗jar打包文件和一个描写文件,差异的是这个描写文件的范例为.jam.而ADF中的配置就是相当于WTK中的setting.也就是用于jam文件描写的项目。 好了,我们先新成立一个工程,点new project,会呈现一个提示窗口,让你输入工程名称,上面尚有一个参考工程的选择,这个不消管它。我们的工程名就叫Test_doja. 点create建设。
然后在这个窗口会显示一些我们建设的信息。好比我的模仿器安装路径是D盘根目次。那么会显示下面信息:
Placed java source files in D:\jDKDoJa2.5\apps\Test_doja\src Placed resource files in D:\jDKDoJa2.5\apps\Test_doja\res Placed Scratchpad file in D:\jDKDoJa2.5\apps\Test_doja\sp
说明在模仿器的apps目次下,就是我们建设的工程目次。内里尚有三个文件夹,scr用来放.java文件,res用来放资源,sp用来存放Scratchpad文件。这个Scratchpad这里要具体讲一下。 appli模式简朴说就是客户手机通过毗连 I – mode处事器来得到其它的网络资源。这些资源可以来自差异的网站。手机用单独占一块雷同硬盘的区域用来存储这些资源,叫做Scratchpad,一般的DoJa手机游戏都是先从网络上下载资源到Scratchpad里,然后再从Scratchpad中读取来用。并且Scrtchpad是可写的,可以生存游戏信息。
#p#副标题#e# 回到我们适才的工程中,此刻sp目次是空的,也就是没有Scratchpad文件。我们可以本身建设一个。默认名称是工程名后头加上数字0,Scratchpad文件的后缀名为.scr。
需要说明的是,res目次里也是放资源文件的。所差异的是res中放的资源文件,在打包时会一起打进Jar文件。而sp目次下的Scratchpad不会。
我们的措施很简朴,所以就不消建造Scratchpad了。成果就是实现高级界面与初级界面的切换。下面是代码:
import com.nttdocomo.ui.IApplication;
import com.nttdocomo.ui.Canvas;
import com.nttdocomo.ui.Panel;
import com.nttdocomo.ui.Button;
import com.nttdocomo.ui.Label;
import com.nttdocomo.ui.ComponentListener;
import com.nttdocomo.ui.Display;
import com.nttdocomo.ui.Component;
import com.nttdocomo.ui.Graphics;
public class Test_doja extends IApplication implements ComponentListener
{
Panel p = new Panel();
public Test_doja()
{
Button ok = new Button("ok");
Label label = new Label("The first DoJa program!");
p.setBackground(0xc0c0c0);
p.add(label);
p.add(ok);
p.setComponentListener(this);
}
public void start()
{
Display.setCurrent(p);
}
public void componentAction(Component source, int type, int param)
{
if(type == ComponentListener.BUTTON_PRESSED)
{
Display.setCurrent(new DoJaCanvas());
}
}
}
class DoJaCanvas extends Canvas
{
public DoJaCanvas()
{
}
public void paint(Graphics g)
{
g.setColor(0xff0000);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0xffffff);
g.drawString("Hello world!",30,50);
}
}
代码很简朴,所以我没加注释,有过J2SE和J2ME编程履历的人,应该很容易看懂。Iapplication类跟MIDlet性质沟通。不外它只需要从写start()要领,作为措施启动进口。
我们此刻把代码生存在scr文件夹中,然后点build,假如没错误,则会提示下面信息:
D:\jDKDoJa2.5\apps\Test_doja\bin\Test_doja.jar created
D:\jDKDoJa2.5\apps\Test_doja\bin\Test_doja.jam updated
Build completed
说明jar和jam文件直接建设完了。然后点run,就可以看结果了。是不是很轻松。: )
四, DoJa游戏移植到J2ME平台的要领
这部门内容我在手机移植体会(二)中已经先容过,这次我主要说一下资源文件的读取。其实DoJa的API比尺度J2ME富厚很多,所以移植是有难度的。用尺度的J2MEAPI类库不能完全实现DoJa类库所有成果。我主要说一下一般的移植要领。
前面讲过关于Scratchpad的观念。我们凡是看到的工程文件,都包括许多内容。个中有gif资源文件,.scr文件,和代码。我以为只有.scr文件和java代码和打包后的jam和jar文件就够用了。因为图片和声音文件凡是也在.scr文件中包括。不外有些小游戏的一些图或声音也会直接打在jar包内。就是工程中res目次下的对象。。
关于.scr文件的读取与理会,DoJa都提供了具体的要领,好比:
DataInputStream in = Connector.openDataInputStream(
"scratchpad:///0;pos=" + offset+ ",length=" + length);
实际暗示 从 scratchpad 的第 0 扇区 偏移量为offset,长度为length的数据作为 输入流。
前面我们说了scratchpad像硬盘一样。所以scratchpad:///0 的0 也可以是1 可能此外数字。可是区域差异。0对应的Scratchpad文件名为"工程名"+0.scr,假如是1就是"工程"+1.scr.也就是说Scratchpad可以由多个文件构成暗示差异的存储区域.假如是往scratchpad中写操纵,就用DataOutputStream构建就可以了。好比生存游戏中的分数。
上面这是从scratchpad中获得资源文件在DoJa代码中的写法。假如要是从res目次中读取,如何写呢。像这样:
DataInputStream in is = Connector.openInputStream("resource:///" + filename);
filename就暗示资源文件的名字。
看了上面的暗示要领,我想各人应该会用J2ME的要领来把他们从写了吧。DoJa读取资源的要领很机动,好比gif图片,可以直接用文件名获得图片工具,也可以用byte数组构建,不外较量常用的,照旧用输入流来构建。所以移植中要修改图片,首先要对.scr文件举办阐明,理会,将图片整理出来,才气利用。提取图片的要领,可以参考我BLOG中的一个措施。
在IApplication类中有个很重要的要领 getArgs() ,这个要了解获得 jam描写文件中App param项目标参数,这些参数可以用空格分隔,每一段就暗示一个元素,因为用getArgs()获得的是一个String的数组。所以许多游戏都是靠jam中的App param参数举办初始化资源,或判定。
把资源文件找到后,就可以对游戏举办修改了,不外有些要领需要你本身从写,好比drawImage 有许多参数的要领,可以从大图中画小图, 尚有 doja本身按键处理惩罚机制。不外这些假如仔细看API的话,是可以用J2ME从写的。 有些实现不了的成果,就可以注释掉了。
以上就是我对移植DoJa游戏的一点发起。有些在手机游戏移植体会(二)内里已经说过的我就没有再提。假如你在移植中碰着什么问题可以向我咨询,我会尽力辅佐你。
五,相关资源链接
http://www.doja-developer.net 可以下载模仿器,API文档,以及DoJa技能的先容等
http://www.nttdocomo.com NTT DoCMo 公司的官方网站,内里先容一些最新的技能和I-mode 的先容。