`

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

阅读更多

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慢慢学教程.zip_J2ME 教程_j2me

    J2ME教程是学习这一技术的基础,尤其对初学者而言,它提供了从入门到进阶的全面指导。 本教程“J2ME慢慢学教程”可能包含以下关键知识点: 1. **J2ME架构**:J2ME由配置(Configurations)和 profiles(配置文件)...

    J2ME 中文教程1.01a

    尽管本教程内容涉及初学阶段,但本教程不仅仅是一本入门的读物,很多的内容的详细程度对于有经验的开发者来说,也是很多脾益的。事实上,本教程假定初学者已经有了一定的JAVA语言基础。 读者可以快速的从这里...

    这是一本介绍J2ME 编程的书籍,里面有具体的实现过程讲解,是很好的入门书籍

    1. **J2ME架构** J2ME由配置(Configurations)和 profiles(Profile)组成。配置定义了设备的基本硬件和软件能力,比如CLDC(Connected Limited Device Configuration)用于内存和处理能力有限的设备。而profile则...

    netBeans J2ME PDA 手机 编程入门

    标题中的“netBeans J2ME PDA 手机 编程入门”指的是使用...压缩包内的“J2ME无线设备程序设计.pdf”很可能是该教程的详细指南,包含了以上各个知识点的深入讲解。阅读并实践其中的内容,将有助于全面理解J2ME编程。

    j2me手机游戏编程入门

    很好的入门材料,里面有具体实例,详细讲解,真的不错!!

    《J2ME手机游戏开发技术详解》

    总之,《J2ME手机游戏开发技术详解》是一本全面的指南,涵盖了从入门到高级的J2ME游戏开发技术,对于那些想踏入移动游戏开发领域的人来说,是一本不可多得的参考资料。尽管现在J2ME在智能机市场已被其他平台取代,但...

    J2ME手机游戏贪吃蛇小游戏

    这是一个很好的起点,可以帮助开发者建立起对J2ME游戏开发的基本认识,并为进一步的移动游戏开发打下基础。 总的来说,J2ME手机游戏贪吃蛇小游戏是一个实用的学习案例,它涵盖了移动游戏开发的基础知识,包括线程...

    Java手机程式设计入门

    Java手机程式设计入门是针对初学者的一份教程资源,主要关注的是J2ME(Java 2 Micro Edition)技术,这是Java平台的一个子集,用于开发和部署在移动设备、嵌入式系统等上的应用程序。本教程以繁体字编写,但内容深度...

    android视频教程下载.pdf

    【Android 学习资源概述】 本资源集合包含了丰富的Android开发学习视频教程,涵盖了从入门到高级,从基础理论到实战项目的各个层面。...同时,很多教程还附带源码,有助于学习者更好地理解和实践所学知识。

    J2ME Game Development with MIDP2.pdf

    对于希望从其他语言或平台转向J2ME游戏开发的经验丰富的游戏开发者来说,本书也是一个很好的入门资料。 - **适用场景:** 本书适用于希望快速了解如何使用J2ME进行移动游戏开发的专业人士,同时也可用作移动游戏...

    JAVA入门教程21天学通JAVA2第三版

    对于希望从事Web开发的人来说,《Java Server Pages》是一本很好的入门书籍,而对于希望了解EJB的企业级开发者,《Enterprise JavaBeans, 2nd Edition》则是非常实用的选择。通过这些书籍的学习,结合实践操作,将有...

    【藏宝图】(珍藏版)2012java开发工程师必备精品资料(115)

    这份手册系统地介绍了Java编程从入门到高级的所有知识点,对于自学Java的读者来说是一本很好的参考资料。 #### 二十二、JAVA学生管理系统 这是一个基于Java的学生管理系统项目,包含了学生信息管理、成绩管理等...

    Java新手入门的30个基本概念

    前言: 在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我...

    CplplProgrammingCookbook学习c++很好的一本书

    2. **面向对象编程(OOP)**:深入讲解面向对象编程的核心原则,如封装、继承和多态性,并展示了如何在实际项目中应用这些概念来构建灵活且可扩展的代码。 3. **标准模板库(STL)**:这是本书的重点章节之一。作者详细...

    java基础知识问答

    - **《Thinking in Java》**:这本书不仅讲解了Java语言本身,还涉及了很多设计模式的概念,非常适合初学者阅读。 - **O'Reilly和Wrox出版社**:这两个出版社出版了许多优秀的Java书籍,涵盖了不同层次的学习内容...

    新手必看的30个问题

    - **在线教程和视频课程**:随着互联网的发展,现在有很多优质的在线资源可供学习。例如Codecademy、Udemy等网站提供的Java课程。 - **官方文档和论坛**:Oracle官方网站提供了大量的文档和技术支持,包括API文档、...

    2009年的新书:Essential JavaFX

    5. **案例研究与项目实战**:通过具体的案例分析,展示了如何将所学知识应用于实际项目中,帮助读者更好地理解和掌握JavaFX的开发流程。 #### 四、书籍的价值与适用人群 - **对于初学者**:这本书提供了全面的基础...

    Java2

    1. **多层架构**:Java 2平台被划分为三个版本:J2SE(Java 2 Standard Edition)用于桌面应用,J2EE(Java 2 Enterprise Edition)针对企业级应用,J2ME(Java 2 Micro Edition)用于嵌入式设备和移动应用。...

    Java学习资源推荐

    首先,对于新手,建议从基础开始,《Java2 核心技术卷一:原理》和《Java2 核心技术卷二:高级性能》是很好的起点。这两本书由Horstmann撰写,覆盖了Java语言的基本语法、数据类型、面向对象编程、图形用户界面(GUI...

Global site tag (gtag.js) - Google Analytics