J2ME程序教程,程序+讲解,很好的入门教程(转载) 【2】
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();
}
}
?