中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > J2ME
使用 Jbulider 开发 J2ME 移动游戏程序
作者:syngle 时间:2006-09-22 08:53 出处:j2medev 责编:月夜寒箫
              摘要:使用 Jbulider 开发 J2ME 移动游戏程序
作者使用JBuilder2005,里面自带WTK2.1,自己下载2.2版本,2.2那个默认的模拟器看着实在爽。另外,Jbuilder X下的WTK也是2.0的版本。Jbuilder 9的WTK是1.04。首先开启Jbuilder。建立一个Project:













然后填写名字和路径。继续:


然后选择JDK路径,本身已有WTK2.1,你可以选择。但是你也可以自己选择其他的WTK版本:


点击jdk后面的路径按钮,继续:


next.工程建立完毕。接着点击file->New:


然后在对话框左边选择Micro,你就能看到右边出现MIDlet,Displayable。接上面的:如图示


点击MIDlet or Displayable,则让你输入MIDlet的名字.如图:


继续下一步,让你输入一个Displayable的名字,包括类型(form,canvas等),是否自动加载Command等等。


然后Jbuilder自动生成所需代码,以及Jbuilder自加的一些东西。你可以添加或修改之。这里我将本站一篇关于介绍Gamecanvas的文章的代码拿过来,做少量修改,作为本文章的一个演示:
TestMIDlet.java文件:
            package temps;
            import javax.microedition.midlet.*;
            import javax.microedition.lcdui.*;
            /**
            * <p>Title: </p>
            *
            * <p>Description: </p>
            *
            * <p>Copyright: Copyright (c) 2005</p>
            *
            * <p>Company: </p>
            *
            * @author not attributable
            * @version 1.0
            */
            public class TestMIDlet extends MIDlet
            {
            private Display display;
            public void startApp()
            {
            try
            {
            display = Display.getDisplay(this);
            Displayable1 gameCanvas = new Displayable1();
            gameCanvas.start();
            display.setCurrent(gameCanvas);
            }
            catch (Exception ex)
            {
            System.out.println(ex);
            }
            }
            public Display getDisplay()
            {
            return display;
            }
            public void pauseApp()
            {
            }
            public void destroyApp(boolean unconditional)
            {
            exit();
            }
            public void exit()
            {
            System.gc();
            destroyApp(false);
            notifyDestroyed();
            }
            }
            Displayable1.java内容:
            package temps;
            import javax.microedition.lcdui.*;
            import java.util.Random;
            import javax.microedition.lcdui.game.*;
            /**
            * <p>Title: </p>
            *
            * <p>Description: </p>
            *
            * <p>Copyright: Copyright (c) 2005</p>
            *
            * <p>Company: </p>
            *
            * @author not attributable
            * @version 1.0
            */
            public class Displayable1 extends GameCanvas implements Runnable
            {
            private boolean isPlay; // Game Loop runs when isPlay is true
            private long delay; // To give thread consistency
            private int currentX, currentY; // To hold current position of the 'X'
            private int width; // To hold screen width
            private int height; // To hold screen height
            private Random random=new Random(System.currentTimeMillis());
            private final int[] sequence={0,1,2,1,0,1,2,1,0,1,2,1,1,1,1,1,1};
            private int counter=0;
            private int enemyX,enemyY;
            private int enemyDirect=0;
            private boolean isdown=false;
            private boolean isalive=true;
            // Sprites to be used
            private Sprite playerSprite;
            private Sprite backgroundSprite;
            private Sprite enemySprite;
            // Layer Manager
            private LayerManager layerManager;
            // Constructor and initialization
            public Displayable1() throws Exception
            {
            super(true);
            width = getWidth();
            height = getHeight();
            currentX = width / 2;
            currentY = height / 2;
            enemyX=width/4;
            enemyY=height/4;
            delay = 100;
            Image playerImage=null;
            Image backgroundImage=null;
            Image enemy=null;
            // Load Images to Sprites
            try
            {
            playerImage = Image.createImage("/transparent.png");
            backgroundImage = Image.createImage("/background.png");
            enemy=Image.createImage("/frames.png");
            }
            catch(Exception e)
            {
            System.out.println("get Image error!"+e.getMessage());
            }
            playerSprite = new Sprite(playerImage, 32, 32);
            System.out.println(playerSprite.getRawFrameCount());
            enemySprite=new Sprite(enemy,50,21);
            backgroundSprite = new Sprite(backgroundImage);
            layerManager = new LayerManager();
            layerManager.append(playerSprite);
            layerManager.append(enemySprite);
            layerManager.append(backgroundSprite);
            }
            // Automatically start thread for game loop
            public void start()
            {
            isPlay = true;
            Thread t = new Thread(this);
            t.start();
            }
            public void stop()
            {
            isPlay = false;
            }
            // Main Game Loop
            public void run()
            {
            Graphics g = getGraphics();
            while (isPlay == true)
            {
            input();
            drawScreen(g);
            try
            {
            Thread.sleep(delay);
            }
            catch (InterruptedException ie)
            {
            }
            }
            }
            // Method to Handle User Inputs
            private void input()
            {
            int keyStates = getKeyStates();
            playerSprite.setFrame(0);
            if(isalive)
            {
            if(counter==0)
            {
            enemyDirect=Math.abs(random.nextInt()%4);
            }
            counter++;
            switch(enemyDirect)
            {
            case 0:
            enemyY=Math.max(0,--enemyY);
            break;
            case 1:
            enemyY=Math.min(++enemyY,height-enemySprite.getHeight());
            break;
            case 2:
            enemyX=Math.max(0,--enemyX);
            break;
            case 3:
            enemyX=Math.min(++enemyX,width-enemySprite.getWidth());
            break;
            }
            counter=(counter++)%(sequence.length());
            enemySprite.setFrame(sequence[counter]);
            }
            else
            {
            enemyY+=counter;
            enemyY=Math.min(enemyY,height-enemySprite.getHeight());
            if(enemyY<height-enemySprite.getHeight())
            counter++;
            enemySprite.setFrame(3);
            }
            // Left
            if ((keyStates & LEFT_PRESSED) != 0)
            {
            currentX = Math.max(0, currentX - 1);
            playerSprite.setFrame(1);
            }
            // Right
            if ((keyStates & RIGHT_PRESSED) != 0)
            if (currentX + 5 < width)
            {
            currentX = Math.min(width, currentX + 1);
            playerSprite.setFrame(3);
            }
            // Up
            if ((keyStates & UP_PRESSED) != 0)
            {
            currentY = Math.max(0, currentY - 1);
            playerSprite.setFrame(2);
            }
            // Down
            if ((keyStates & DOWN_PRESSED) != 0)
            {
            isdown=true;
            }
            if ((keyStates & DOWN_PRESSED) != 0)
            {
            if(isdown)
            {
            if (currentY + 10 < height)
            {
            currentY = Math.min(height, currentY + 1);
            playerSprite.setFrame(4);
            }
            }
            }
            if((keyStates & FIRE_PRESSED)!=0)
            {
            isalive=!isalive;
            counter=0;
            }
            if(!(enemyX+enemySprite.getWidth()<currentX
            || enemyY+enemySprite.getHeight()<currentY
            || enemyX>currentX+playerSprite.getWidth()
            || enemyY>currentY+playerSprite.getHeight()) && isalive)
            {
            counter=0;
            isalive=false;
            }
            }
            // Method to Display Graphics
            private void drawScreen(Graphics g)
            {
            g.setColor(0xffffff);
            g.fillRect(0, 0, getWidth(), getHeight());
            g.setColor(0x0000ff);
            // updating player sprite position
            playerSprite.setPosition(currentX, currentY);
            enemySprite.setPosition(enemyX,enemyY);
            layerManager.setViewWindow(0, 0, width, height);
            layerManager.paint(g, 0,0);
            g.setColor(0xffffff);
            flushGraphics();
            }
            }

此程序里敌人随机向4个方向移动,而玩家控制的角色可任意移动, 如果两者发生碰撞,则敌人死亡。另外按fire键可直接让敌人生或死,关于运行,Jbuilder里有个运行配置:

 

一般不用修改,如果多个Midlet,你可以在这里添加。关于用Jbuilder打包,一样file->new:

 

这个在2005和9,x里有所不同,选择Archive,右边选择MIDlet,然后完成。

 

这里选择要打包文件的目录,当前默认是所有的class文件和资源文件,你也可以删除掉,自己选择一部分。然后next,直到最后。 然后运行,在运行配置中默认重新rebuild,打包等等。然后你能看到左上框里有jar文件和jad文件。

 

运行结果:

 

用你控制的主角去碰撞这只大飞虫试试:

 

结果飞虫掉下去啦!

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有