WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章J2ME技术程序开发J2ME RPG游戏边学边做(二)

J2ME RPG游戏边学边做(二)
作者:zhagy  来源:J2MEDEV  发布时间:2005-8-27 15:11:21
在写第二篇之前首先感谢favoyang在前一篇给我提出的几点建议。
1、public void moveDown() throws IOException
{
//英雄下移,并改为相应的图片
setImage(Image.createImage("/hero_down.png"), 17, 26);
nextFrame();
this.y = Math.min(braveCanvas.getHeight(), y + 1);
}
   在io包中的读取是非常耗内存的,所以Image.createImage("/hero_down.png")放在线程的循环中确实不好,
现在已经改成图象在BraveCanvas类中创建(下面的代码已更改),然后由moveDown(Image image)方法接收传递
进来的图象。

2、RPG是个大工程,一个人的力量是很难完成的,我只想实现基本的RPG功能,比如人物的对话,场景的
转换,战斗等等,希望大家多多给予帮助。

  这一篇我将给游戏加入地图,以下是该篇所需要的图片:
background.png

foreground.png

  一个RPG中的游戏地图是非常大而且多的,为了方便以后的维护,我创建了一个Scene类,该类主要是产
游戏所需要的地图。

Scene.java
package brave;

import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.lcdui.Image;

public class Scene
{
public static TiledLayer createTiledLayerByBackground(Image image)
{
//使用TiledLayer创建地图
TiledLayer tiledLayer = new TiledLayer(10, 8, image, 48, 64);
tiledLayer.fillCells(0, 0, 10, 8, 2);
return tiledLayer;
}
}

修改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;
import javax.microedition.lcdui.game.TiledLayer;


public class BraveCanvas extends GameCanvas implements Runnable
{
private boolean sign;
private Graphics g;
private Hero hero;
private Image upimage;
private Image downimage;
private Image leftimage;
private Image rightimage;
private TiledLayer backgroundMap;

public BraveCanvas()
{
super(true);
}

public void startup()
{
this.sign = true;
try
{
//产生地图
backgroundMap = Scene.createTiledLayerByBackground(
Image.createImage("/background.png"));

//改正上一篇的错误
upimage = Image.createImage("/hero_up.png");
downimage = Image.createImage("/hero_down.png");
leftimage = Image.createImage("/hero_left.png");
rightimage = Image.createImage("/hero_right.png");

hero = new Hero(upimage, 17, 26);
hero.setFrameSequence(new int[]{1, 1, 0, 0, 1, 1, 2, 2});
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)
{
e.printStackTrace();
}
}
}

public void input(Graphics g) throws IOException
{
int keystates = getKeyStates();
switch(keystates)
{
case UP_PRESSED:
//由这里传入需要改变的图片
hero.moveUp(upimage);
break;
case DOWN_PRESSED:
hero.moveDown(downimage);
break;
case LEFT_PRESSED:
hero.moveLeft(leftimage);
break;
case RIGHT_PRESSED:
hero.moveRight(rightimage);
break;
}
hero.afresh();
}

public void paint(Graphics g)
{
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0xffffff);
//显示地图
backgroundMap.paint(g);
hero.paint(g);
flushGraphics();
}
}


  现在我们的英雄虽然能在草地上行走了,但感觉给他移动的空间太小了。而且我们在创建背景地图的时
候,地图大小明明是512*480的。好,接下来我们要做的就是让英雄可以在更大的天地中活动。这里就需要一
个BraveManager类来管理这些屏幕上的Sprite和TiledLayer,该类继承LayerManager。

BraveManager.java

package brave;

import javax.microedition.lcdui.game.LayerManager;

public class BraveManager extends LayerManager
{
private BraveCanvas braveCanvas;

public void setBraveCanvas(BraveCanvas braveCanvas)
{
this.braveCanvas = braveCanvas;
}

public void afresh()
{
//确定当前试图的坐标
//这里用一个比较简单的算法来使英雄永远在屏幕的中央
int viewX = Math.max(0, getLayerAt(0).getX() - braveCanvas.getWidth()/2);
int viewY = Math.max(0, getLayerAt(0).getY() - braveCanvas.getHeight()/2);
viewX = Math.min(viewX, getLayerAt(1).getWidth() - braveCanvas.getWidth());
viewY = Math.min(viewY, getLayerAt(1).getHeight() - braveCanvas.getHeight());
setViewWindow(viewX, viewY, braveCanvas.getWidth(), braveCanvas.getHeight());
}
}


修改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;
import javax.microedition.lcdui.game.TiledLayer;


public class BraveCanvas extends GameCanvas implements Runnable
{
private boolean sign;
private Graphics g;
private Hero hero;
private Image upimage;
private Image downimage;
private Image leftimage;
private Image rightimage;
private TiledLayer backgroundMap;
//创建Layer管理视图类
private BraveManager braveManager;

public BraveCanvas()
{
super(true);
}

public vo

[1] [2] [3] [4]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码