科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道DoJa平台手机游戏的开发与移植

DoJa平台手机游戏的开发与移植

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

简单的说,DoJa是日本最大的移动通讯公司NTT DoCoMo的专利技术。而i-mode是该公司对于移动通讯2.5G阶段的一种应用模式,这个技术覆盖很多方面。

作者:中国IT实验室 来源:中国IT实验室 2007年9月22日

关键字: 手机游戏 编程 java

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

    回到我们刚才的工程中,现在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 的介绍。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章