J2ME RPG游戏边学边做(二)

本文是J2ME RPG游戏开发系列的第二篇,介绍了如何为游戏添加地图以及使用Scene类创建TiledLayer。通过BraveManager类管理屏幕上的精灵和TiledLayer,使得英雄可以在更大的地图上移动。同时,创建了一个小镇地图,并对英雄的移动范围进行了调整,以避免穿墙情况。最后,预告了下一篇文章将涉及碰撞检测和人物对话的实现。
摘要由CSDN通过智能技术生成

文章来源:J2ME开发网

在写第二篇之前首先感谢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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值