j2me中,Sprite TieldLayer地图贴图的制作方法

 

public class PersonMoveMain extends MIDlet {
 private Display display;
 private PersonMapCanvas pmc=new PersonMapCanvas(true);
 
 public PersonMoveMain(){
  display=Display.getDisplay(this);
 }
 protected void startApp() throws MIDletStateChangeException {
  display.setCurrent(pmc);
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
 
 }

 protected void pauseApp() {
 }
 class PersonMapCanvas extends GameCanvas implements Runnable{
  //声明绘制地图的图片对象
  private Image map;
  //声明一个精灵对象
  private Sprite sperson;
  private LayerManager lm;
  //声明绘制草地和墙的layer
  private TiledLayer tlRoad;
  private TiledLayer tlWall;
  //声明一组精灵图片对象
  private Image pesondownImage;
  //声明一个绘图工具对象
  private Graphics g;
  //声明精灵的初始坐标x,y
  private int current_x=0;
  private int current_y=0;
  //设置屏幕刷新
  private boolean Running=true;
  // 设置背景层的行数和列数
  private int rowNum = 12;
  private int columnNum = 12;
  //控制LayerManager的x、y坐标VW_X
  private int VM_X=0;
  private int VM_Y=0;
  //定义地图分布情况
  int[][] cells = new int[][]{
    {1,1,2,2,2,2,2,2,2,1,2,2},
    {1,1,1,1,1,1,1,1,1,1,2,1},
    {1,1,1,2,2,2,2,2,1,2,1,1},
    {1,1,1,2,2,2,1,2,1,2,1,1},
    {1,1,1,2,2,1,2,1,1,2,1,1},
    {1,1,1,2,1,2,1,2,1,2,1,1},
    {1,1,1,2,1,2,2,1,1,2,1,1},
    {1,1,1,2,1,2,2,1,1,2,1,1},
    {1,1,1,2,1,2,1,2,1,2,1,1},
    {1,1,1,2,2,1,2,2,1,2,1,1},
    {1,1,1,2,1,2,2,2,1,2,1,1},
    {1,1,1,1,2,2,2,2,1,2,1,1}
   };
  protected PersonMapCanvas(boolean suppressKeyEvents) {
   super(true);
   //获得绘图工具对象
   g=this.getGraphics();
   //获得layer管理类对象
   lm=new LayerManager();
   //创建一个地图image对象和精灵image对象
   try {
    map = Image.createImage("/map.png");
    pesondownImage=Image.createImage("/person_down.png");
   } catch (IOException e) {
    e.printStackTrace();
   }
   //实例化地图对象,草地和墙以及精灵对象
   tlRoad = new TiledLayer(rowNum,columnNum,map,map.getWidth()/2,map.getHeight());
   tlWall = new TiledLayer(rowNum,columnNum,map,map.getWidth()/2,map.getHeight()); 
   sperson=new Sprite(pesondownImage,pesondownImage.getWidth()/4,pesondownImage.getHeight());   
   sperson.setPosition(current_x, current_y);
   //通过循环填充地图
   for(int i=0;i<12;i++){
    for(int j=0;j<12;j++){
     if(cells[j][i]==1){
      tlRoad.setCell(j, i, cells[i][j]);
     }
     else if(cells[j][i]==2){
      tlWall.setCell(j, i, cells[i][j]);
     }
    }
   }
   lm.append(sperson);
   lm.append(tlRoad);
   lm.append(tlWall);
   new Thread(this).start();
  }
  public void run() {
   while(Running){
    System.out.println("AAAAAAAAAAAAAA"+sperson.getX()+","+sperson.getX());
   
    g.setColor(255, 255, 255);
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    
    lm.setViewWindow(VM_X,VM_Y,this.getWidth(),this.getHeight());
    lm.paint(g, 0, 0);
    this.flushGraphics();
    switch (this.getKeyStates()) {
    case DOWN_PRESSED:
     System.out.println("下");
     //判断向下走的范围不要超过地图
     if(sperson.getY()>=0&&sperson.getY()<=map.getHeight()*12-sperson.getHeight()){
      sperson.nextFrame();//下一帧
      sperson.move(0, 1);
     }
     lm.paint(g, this.getWidth(), this.getHeight());
     //判断当精灵走到屏幕的0.6倍后、向上滚动地图
     if(sperson.getY()>this.getHeight()*0.6&&VM_Y<map.getHeight()*12-this.getHeight()){
      System.out.println("DDDD"+VM_Y);
      VM_Y++;
     }
     this.flushGraphics();
     break;
    case UP_PRESSED :
     System.out.println("上");
     sperson.nextFrame();//下一帧
     sperson.move(0, -1);
     lm.paint(g, this.getWidth(), this.getHeight());
     this.flushGraphics();
     break;
    case LEFT_PRESSED :
     System.out.println("左");
     sperson.nextFrame();//下一帧
     sperson.move(-1, 0);
     lm.paint(g, this.getWidth(), this.getHeight());
    
     this.flushGraphics();
     break;
    case RIGHT_PRESSED:
     System.out.println("右");
     sperson.nextFrame();//下一帧
     sperson.move(1, 0);
     lm.paint(g, this.getWidth(), this.getHeight());
     if(sperson.getX()>this.getWidth()*0.6&&VM_X<map.getHeight()*12-this.getWidth()){
      System.out.println("DDDD"+VM_X);
      VM_X++;
     }
     this.flushGraphics();
     break;
    }
    try {
     Thread.currentThread().sleep(100);
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    
   }
  }
  
  
 }
}

运行效果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值