- 浏览: 601104 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (448)
- 字符串相关 (16)
- Struts2页面显示 (15)
- Hibernate错误记录 (6)
- linux命令 (2)
- java项目测试 (5)
- 个人作品 (10)
- hibernate应用 (15)
- struts1 (7)
- 数据库(除了hibernate) (42)
- J2ME/WAP (37)
- servlet/jsp (49)
- java桌面应用+java综合 (14)
- 服务器配置,报错解决 (24)
- Myeclipse配置,抛错解决 (8)
- linux (18)
- JavaScript+jquery+ajax (45)
- div css 页面设计 (16)
- 互联网综合运营 (14)
- 编程工具类 (3)
- 论文 报告 文献 (14)
- PHP (26)
- struts2 (9)
- spring (1)
- 我的IT生活 (14)
- Resin (6)
- java项目记录 (14)
- https安全 (11)
- 支付技术 (3)
最新评论
-
yihaijunyxr:
很好呀,我好久没用iteye了,今天找出两个帐号(yihaij ...
c/c++的监听tmlisten启动缓慢解决 -
yihaijun:
好像这不算是技术博客,是工作博客
c/c++的监听tmlisten启动缓慢解决 -
ml365:
后来还优化了webservice的前置框架,不用cxf,用了另 ...
c/c++的监听tmlisten启动缓慢解决 -
Jayliuying:
有点晚哈 但是也支持一下 楼主
java相关论文的参考文献【转】 -
gqsunrise:
...
我是项目经理,我的项目管理日记【20120229】
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 });
发表评论
-
什么是WAP网关?
2011-10-17 17:09 9781. 什么是WAP网关? WA ... -
判断用户通过手机访问wap还是电脑直接访问
2011-10-17 16:29 1938首先说最根本的解决 ... -
wap的全面解析!!
2011-10-17 16:29 16711. 开发WAP软件需要哪 ... -
j2me library failed to get library information[转]
2010-12-11 21:59 1098出現過類似問題,我是每次都用的run as...->ru ... -
j2me联网时候对于代理问题可能会出现的错误【转】
2010-12-11 11:30 739众所周知,CMWAP是一个网关,同时又是一个代理服务器,我 ... -
在无线J2ME设备上实现超文本传输协议【转】
2010-12-11 11:27 725随着越来越多手提电 ... -
J2ME使用Socket通过cmwap接入点访问安全HTTPS 2【转】
2010-12-11 11:26 1208新建一个Midp应用程序,在startApp中加入以下代码: ... -
J2ME使用Socket通过cmwap接入点访问安全HTTPS1 【转】
2010-12-11 11:25 1358这个问题是在我升级J2ME版XHTML浏览器的时候被引入的,我 ... -
J2ME无线联网技术中的HTTP连接[转]
2010-12-11 11:24 824import java.io.ByteArrayOutputS ... -
wml教程 中文手册
2010-12-11 01:02 833http://www.g168.net/txt/wml/ ... -
j2me结合j2ee实现用户登陆功能-2【转】
2010-12-11 00:41 915服务器代码:LoginServlet:package co ... -
j2me结合j2ee实现用户登陆功能【转】
2010-12-11 00:40 807手机客户端代码:LoginForm:package com ... -
独立WAP交友网站趋势分析
2010-12-10 19:28 919从互联网开始,交友网 ... -
什么是WAP?wap技术简介(转)
2010-12-10 19:25 936程序员都在讨论Wireless(无线)技术,也就是常说到的WA ... -
j2me游戏开发:控制飞机移动(转)
2010-12-10 19:01 8561. 飞机plane是一个标准的plane。由三桢画面组成,: ... -
j2me游戏开发:工具类的完善(转)
2010-12-10 19:00 883虽然我们有了midp2.0的支持,但是有时还是需要一些辅助工具 ... -
J2ME程序教程,程序+讲解,很好的入门教程(转载) 【2】
2010-12-10 18:59 683J2ME RPG游戏边学边做(二) 1、public vo ... -
J2ME内存优化(转载)
2010-12-10 18:58 835Out momory 一阵天旋地转 ... -
PngMate使用教程2(转)
2010-12-10 18:57 823下面我们来换一张图片,街头霸王Ken,这张gif的帧数比较多, ... -
PngMate使用教程1(转)
2010-12-10 18:56 1253PngMate使用教程 JAVA手机网[www.cnjm.n ...
相关推荐
j2me入门教程j2me入门教程j2me入门教程j2me入门教程j2me入门教程
J2ME程序设计实例教程
J2ME程序开发全方位基础讲解汇总
j2me入门程序j2me入门程序j2me入门程序j2me入门程序j2me入门程序
j2me教程j2me教程j2me教程j2me教程
祥细的PDF教程!教你编写一个手机J2ME程序!
J2ME培训教程,以前学JJ2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程2ME发的一个PPT,内容还可以,需要的朋友不要客气J2ME...
自己动手搭建,我个人写的指导文档,J2ME基于Eclipse+EclipseME+WTK的J2ME平台搭建,希望对学习的朋友有帮助。
《J2ME程序设计实例教程》中的实例源码
J2ME 游戏毕业设计+源代码+论文
j2me客户服务 基于socket + mysql驱动
用j2me开发华容道,有详细的教程,还有源代码…瀑布式开发模式来规划项目。。。
J2me中文教程.pdf J2me中文教程.pdf
J2ME实用教程,含PPT+源代码! 可以轻松学会J2ME的开发,,,
J2ME程序设计教程 J2ME程序设计教程 J2ME程序设计教程
J2ME程序开发全方位基础讲解汇总.rar
《j2me程序设计实例》,包括很多的实例,像短消息、邮件、文件管理系统、播放器等等。