MyCanvas.java
上传用户:gyyuli
上传日期:2013-07-09
资源大小:3050k
文件大小:4k
源码类别:

J2ME

开发平台:

Java

  1. import javax.microedition.lcdui.*;
  2. import javax.microedition.lcdui.game.*;
  3. import java.io.IOException;
  4. public class MyCanvas extends GameCanvas implements Runnable,CommandListener  
  5. {
  6.   private LayerManagerDemo midlet;//程序控制类
  7.   private volatile Thread animationThread=null;//线程
  8.   private TiledLayer mBackground;//地图
  9.   private LayerManager mLayerManager;
  10.   private int canvasHeight, canvasWidth;//屏幕高度/宽度
  11.   private static int tileHeight,tileWidth;//地图的高度/
  12.   private static int columns,rows;
  13.   private static int mapWidth,mapHeight;
  14.   private boolean isRun;  
  15.   private int curX,curY;//当前viewer坐标
  16.   private int xOffset = 5,yOffset = 5;
  17.   
  18.   private final int SLEEP=10;
  19.   private Command exit;
  20.   public MyCanvas(LayerManagerDemo midlet)
  21.   {
  22.     super(true);
  23.     this.midlet = midlet;
  24.     canvasHeight=getHeight();
  25.     canvasWidth=getWidth();
  26.     try{
  27.     mBackground = createBackground();//创建背景
  28.     }catch(IOException e){
  29.     System.out.println("create error");
  30.     }
  31.     mLayerManager = new LayerManager();//创建层管理实例
  32.     mLayerManager.append(mBackground);//添加地图
  33.     exit=new Command("Exit", Command.STOP,1);
  34.     this.addCommand(exit);
  35.     this.setCommandListener(this);//两个按键
  36.    }
  37.  
  38.   synchronized void start()
  39.   {
  40.     isRun=true;
  41.     animationThread=new Thread(this);
  42.     animationThread.start();
  43.   }
  44.   public void run()
  45.   {
  46.     Graphics g = this.getGraphics();
  47.     try
  48.     {
  49.       while (isRun)
  50.       {
  51.        input();
  52.        tick();
  53.        render(g);
  54.         Thread.sleep(SLEEP);
  55.       }
  56.     }
  57.     catch(InterruptedException ie)
  58.     {
  59.       System.out.println(ie.toString());
  60.     }
  61.   }
  62.  
  63.   private TiledLayer createBackground()throws IOException {
  64.     Image image = Image.createImage("/background.png");//创建背景图片
  65.     TiledLayer tiledLayer = new TiledLayer(5, 5, image, 78, 36);//注意:背景的参数的设置!
  66.     int LEA = 1;//草地lea
  67.     int FLD = 2;//田地filed
  68.     int HSE = 3;//房子house
  69.     int TRE = 4;//树木tree
  70.     int WOD = 5;//树丛wood
  71.     int LAK = 6;//湖泊lake
  72.     tileWidth = 78;
  73.     tileHeight = 36; 
  74.     columns = 5;
  75.     rows = 5;
  76.     mapWidth =tileWidth*columns;
  77.     mapHeight = tileHeight*rows;
  78.     int[] map = {//地图数组
  79.        LEA,FLD,TRE,FLD,FLD,
  80.        LEA,LEA,LAK,WOD,LEA,
  81.        HSE,LEA,HSE,WOD,FLD,
  82.        WOD,LAK,HSE,LEA,WOD,
  83.        HSE,LEA,LEA,TRE,LAK,
  84.     };//显示地图
  85.     
  86.     for (int i = 0; i < map.length; i++) {
  87.       int column = i % columns;
  88.       int row = (i - column) / columns;
  89.       tiledLayer.setCell(column, row, map[i]);//通过一个循环来设置tiledLayer
  90.     }
  91.     return tiledLayer;//返回
  92.   }
  93.   private void input(){
  94.   int keyState = getKeyStates(); //获得键盘状态
  95.   if ((keyState & LEFT_PRESSED) != 0) { //如果左键被按下
  96.       curX = curX - xOffset;
  97.      // if(curX >= 0)curX=0;     
  98.    
  99.   }
  100.   if ((keyState & RIGHT_PRESSED) != 0) { //如果右键被按下
  101.       curX = curX + xOffset;
  102.      // if(curX  <= -mapWidth + canvasWidth)curX = -mapWidth + canvasWidth;
  103.   }
  104.   if ((keyState & UP_PRESSED) != 0) { //如果上键被按下
  105.   
  106.    curY = curY - yOffset;
  107.    //if(curY >= 0)curY=0;
  108.    
  109.   }
  110.   if ((keyState & DOWN_PRESSED) != 0) { //如果下键被按下
  111.     curY = curY + yOffset;
  112.    //if(curY <= -mapHeight + canvasHeight)curY = -mapHeight + canvasHeight;
  113.   }
  114.   }
  115.   private void tick(){
  116.   //mBackground.setPosition(curX,curY);
  117.  //  mLayerManager.setViewWindow(curX,curY,canvasWidth/2,canvasHeight/2);
  118.   
  119.   }
  120.   private void render(Graphics g){
  121.    mBackground.setPosition(50,50);
  122.    mBackground.paint(g);
  123.    //mLayerManager.paint(g,50, 50);
  124.   
  125.     
  126.     
  127.     flushGraphics();
  128.   
  129.   }
  130.   synchronized void stop()
  131.   {
  132.     isRun=false;
  133.   }
  134.   public void commandAction(Command c, Displayable d)
  135.   {
  136.     //if any Exit key is pressed then exit
  137.     if(c==exit)
  138.     {
  139.       midlet.exitMidlet();
  140.     }
  141.   }
  142.  
  143.  
  144. }