J2ME程序教程,程序+讲解,很好的入门教程(转载) 【1】

本文分享了使用J2ME从零开始开发一个简单的角色扮演游戏的过程。通过逐步介绍如何搭建游戏框架、实现英雄角色的移动及其动画效果,帮助读者了解J2ME游戏开发的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

J2ME RPG游戏边学边做(一)

笔者以前是做j2ee的,一个月前由于兴趣所致开始利用业余时间学习j2me游戏开发。在网上看了一通教程后,便准备动手一边学一边做一个简单的rpg游戏。虽然起点比较高,但感觉游戏难度越大,遇到的问题也就越多。这样待全部解决后,也就学的差不多了。另外只有做这种游戏才有学下去的兴趣。以后我会每次把写成的源码及思路发上来,供大家指正。希望各位高人可以无私的帮助我。

下面是游戏中所需要的部分图片,还有的图片下次写到了再上传:

hero_left.png:

hero_right.png:

hero_up.png:

hero_down.png:


整个程序的主体在BraveCanvas类中完成,该类继承于GameCanvas实现Runnable接口,由BraveMIDlet类启动他, BraveMIDlet继承MIDlet实现CommandListener接口。BraveMIDlet类代码如下:(由于只是一个简单的rpg,开头画面和菜单全部省略了,改为由一个按扭启动游戏)

 

BraveMIDlet.java

package brave;

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

public class BraveMIDlet extends MIDlet implements CommandListener

{

private Display d ;

private Command exitCommand ;

private Command startCommand ;

    private BraveCanvas braveCanvas;

public BraveMIDlet()

{

d = Display.getDisplay(this);

exitCommand = new Command("退出",Command.EXIT,1);

startCommand = new Command("开始",Command.SCREEN,1);

}

public void startApp()

{

//创建BraveCanvas

braveCanvas = new BraveCanvas();

braveCanvas.addCommand(exitCommand);

braveCanvas.addCommand(startCommand);

braveCanvas.setCommandListener(this);

//装载BraveCanvas

d.setCurrent(braveCanvas);

}

public void pauseApp()

{

}

public void destroyApp(boolean unconditional)

{

}

public void commandAction(Command c , Displayable dpa)

{

String str_co = c.getLabel();

if(str_co.equals("开始"))

{

   //运行BraveCanvas中的线程(启动游戏)

   braveCanvas.startup();

}

else if(str_co.equals("退出"))

{

   destroyApp(false);

   notifyDestroyed();

}

}

}

BraveCanvas.java

package brave;

import javax.microedition.lcdui.game.GameCanvas;

import javax.microedition.lcdui.Graphics;

import java.io.IOException;

public class BraveCanvas extends GameCanvas implements Runnable

{

private boolean sign;

private Graphics g;

//设置@符号的当前位置

private int x,y;

public BraveCanvas()

{

super(true);

//初始化@位置

x = getWidth()/2;

   y = getHeight()/2;

}

 

public void startup()

{

this.sign = true;

Thread thread = new Thread(this);

//启动线程

thread.start();

}

public void run()

{

g = getGraphics();

while(sign)

{

   try

   {

    //@符号的移动

    input(g);

    //@符号的显示

    paint(g);

    //这里应该有详细的计算,方便为上,置为15

    Thread.sleep(15);

   }

   catch(Exception e)

   {

    System.out.println("2:"+e);

   }

}

}

public void input(Graphics g) throws IOException

{

int keystates = getKeyStates();

switch(keystates)

{

   case UP_PRESSED:

    y = Math.max(0, y - 1);

    break;

   case DOWN_PRESSED:

    y = Math.min(getHeight(), y + 1);

    break;

   case LEFT_PRESSED:

    x = Math.max(0, x - 1);

    break;

   case RIGHT_PRESSED:

    x = Math.min(getWidth(), x + 1);

    break;

}

}

public void paint(Graphics g)

{

//设置画布的背景色

g.setColor(0x000000);

//把背景色画满画布

g.fillRect(0, 0, getWidth(), getHeight());

//设置画布的前景色

g.setColor(0xffffff);

//在画布上写上@

g.drawString("@", x, y, Graphics.TOP|Graphics.LEFT);

//刷新画布

flushGraphics();

}

}

上面代码运行后,画面上会出现一个"@"字符随着键盘的左右而移动。虽然这离rpg游戏相差很远,但这是一个游戏的基本框架。下面我们要做的就是把"@"换成我们的英雄。为了程序清晰,我们还要设计一个英雄类Hero,该类继承于Sprite,这个类里面要用到上面的图片。

Hero.java


package brave;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.Image;
import java.io.IOException;
public class Hero extends Sprite
{
//设置英雄的当前位置
private int x, y;
private BraveCanvas braveCanvas;
public Hero(Image image, int frameWidth, int frameHeight)
{
//英雄的初始化
super(image, frameWidth, frameHeight);
}
public void setBraveCanvas(BraveCanvas braveCanvas)
{
this.braveCanvas = braveCanvas;
}
public void init(int x, int y)
{
//英雄位置的初始化
this.x = x;
this.y = y;
}
public void afresh()
{
//刷新英雄的位置
setPosition(this.x, this.y);
}
public void moveUp() throws IOException
{
//英雄上移,并改为相应的图片
setImage(Image.createImage("/hero_up.png"), 17, 26);
nextFrame();
this.y = Math.max(0, y - 1);
}
public void moveDown() throws IOException
{
//英雄下移,并改为相应的图片
setImage(Image.createImage("/hero_down.png"), 17, 26);
nextFrame();
this.y = Math.min(braveCanvas.getHeight(), y + 1);
}
public void moveLeft() throws IOException
{
//英雄左移,并改为相应的图片
setImage(Image.createImage("/hero_left.png"), 17, 26);
nextFrame();
this.x = Math.max(0, x - 1);
}
public void moveRight() throws IOException
{
//英雄右移,并改为相应的图片
setImage(Image.createImage("/hero_right.png"), 17, 26);
nextFrame();
this.x = Math.min(braveCanvas.getWidth(), x + 1);
}
}
然后把BraveCanvas类稍做修改,把"@"换成英雄
BraveCanvas.java
package brave;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.Graphics;
import java.io.IOException;
import javax.microedition.lcdui.Image;
public class BraveCanvas extends GameCanvas implements Runnable
{
private boolean sign;
private Graphics g;
private Hero hero;
public BraveCanvas()
{
super(true);
}

public void startup()
{
this.sign = true;
try
{
   Image heroimage = Image.createImage("/hero_up.png");
   hero = new Hero(heroimage, 17, 26);
   hero.setBraveCanvas(this);
   hero.init(40,40);
}
catch(Exception e)
{
   e.printStackTrace();
}
Thread thread = new Thread(this);
thread.start();
}
public void run()
{
g = getGraphics();
while(sign)
{
   try
   {
    input(g);
    paint(g);
    Thread.sleep(15);
   }
   catch(Exception e)
   {
    System.out.println("2:"+e);
   }
}
}
public void input(Graphics g) throws IOException
{
int keystates = getKeyStates();
switch(keystates)
{
   case UP_PRESSED:
    hero.moveUp();
    break;
   case DOWN_PRESSED:
    hero.moveDown();
    break;
   case LEFT_PRESSED:
    hero.moveLeft();
    break;
   case RIGHT_PRESSED:
    hero.moveRight();
    break;
}
hero.afresh();
}
public void paint(Graphics g)
{
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0xffffff);
hero.paint(g);
flushGraphics();
}
}


这样,我们的英雄就可以在画面上移动了,不过英雄比较简单,没有hp,mp等等,只是一个图片。而且如果大家感觉英雄的脚步过快,可以在BraveCanvas类中的Hero初始化时设置:
hero.setFrameSequence(new int[]{0, 0, 1, 1, 0, 0, 2, 2 });

 

教程的内容 本教程首先介绍了j2me开发体系,然后深入各个MIDP2.0 API,最后是搭建平台的知识。 第一章 “J2ME技术概述”让你在学习J2ME以前知道什么是J2ME。本章介绍了J2ME平台的体系结构和MIDlet生命周期的概念。为以后的内容打下良好的基础。 第二章“CLDC简介”介绍了MIDP的基础Java Community Process(JCP)公布的CLDC1.0规范(即JSR30)。有了这些知识你就可以顺利的从j2se的基础API过渡到MIDP的基础API上了。 第三章“MIDP高级UI 的使用”介绍了MIDP的可移植UI API,我们称之为高级UI。这样您的应用就可以栩栩如生了。 第四章“MIDP低级UI的使用” 介绍了MIDP的不可移植UI API,我们称之为低级UI。利用他你可以更加自由的绘画你的UI。你将了解到关于事件处理的很多知识。 第五章“MIDP的持久化解决方案 — RMS” 为我们讲解了数据持久化机制——记录管理系统(Record Management System RMS)。这一特别的小型数据库使得MIDP的数据保存变得很特别。 第六章“GAME API” 介绍了MIDP 2.0相对于1.0来说,最大的变化——新添加的用于支持游戏的API,它们被放在javax.microedition.lcdui.game包中。游戏API包提供了一系列针对无线设备的游戏开发类。你可以开发你的游戏了。COOL! 第七章“开发无线网络应用程序” 让我们学习如何开发令人激动的联网应用。无线网络在当今的技术下与有线网络相比它的带宽更小、延迟更大、连接的稳定性更差。这要求我们在开发无线联网应用程序时,和以往有很大不同。 第八章“MIDP 2.0安全体系结构” 将主要介绍MIDP的安全体系模型,并结合一个具体的实例来讲述MIDP2.0安全模型的主要概念。 第九章“MIDP 2.0 Push 技术”介绍了如何通过异步方式将信息传送给设备并自动启动MIDlet程序的机制。 第十章“MIDlet的开发流程与部署”介绍了如何真正完成你的程序并打包发往设备运行。 第十一章“搭建开发平台—WTK”主要讲述J2ME新手最常使用的开发工具Wireless Toolkit(WTK)。从WTK的安装、到MIDlet项目的创建、以及最后的打包发布,一步步带领读者进入MIDlet的开发世界! 第十二章“搭建开发平台—Eclipse”讲述了如何利用EclipseME作为Eclipse一个插件,帮助开发者开发J2ME应用程序。 第十三章“搭建开发平台—JBuilder”介绍了如何利用久负盛名的JBuilder作为开发工具来开发J2ME应用程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值