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

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 StarDemo 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 int MON = 1;//月亮moon
  15.   private int SHN = 2;//闪烁shine
  16.   private int STR = 3;//星星star
  17.   private int AIR = 4;//夜空air
  18.   private int ANI;//动画贴片animated
  19.   
  20.   private int aniStarIndex;
  21.   private int aniCounter;
  22.   private boolean isRun;  
  23.   private int curX,curY;//当前viewer坐标
  24.   
  25.   private final int SLEEP=10;
  26.   private Command exit;
  27.   public MyCanvas(StarDemo midlet)
  28.   {
  29.     super(true);
  30.     this.midlet = midlet;
  31.     canvasHeight=getHeight();
  32.     canvasWidth=getWidth();
  33.     System.out.println(canvasWidth);
  34.     System.out.println(canvasHeight);
  35.     try{
  36.     mBackground = createBackground();//创建背景
  37.     }catch(IOException e){
  38.     System.out.println("create error");
  39.     }
  40.     curX = -(mapWidth - canvasWidth)/2;
  41.     curY = -(mapHeight - canvasHeight)/2;
  42.     mBackground.setPosition(curX,curY);  
  43.     exit=new Command("Exit", Command.STOP,1);
  44.     this.addCommand(exit);
  45.     this.setCommandListener(this);//两个按键
  46.    }
  47.  
  48.   synchronized void start()
  49.   {
  50.     isRun=true;
  51.     animationThread=new Thread(this);
  52.     animationThread.start();
  53.   }
  54.   public void run()
  55.   {
  56.     Graphics g = this.getGraphics();
  57.     try
  58.     {
  59.       while (isRun)
  60.       {
  61.        tick();
  62.        render(g);
  63.         Thread.sleep(SLEEP);
  64.       }
  65.     }
  66.     catch(InterruptedException ie)
  67.     {
  68.       System.out.println(ie.toString());
  69.     }
  70.   }
  71.   private void tick(){
  72.      aniCounter++;
  73.      if(aniCounter%6 == 0)
  74.      mBackground.setAnimatedTile(ANI,SHN);
  75.      else
  76.      mBackground.setAnimatedTile(ANI,STR);
  77.   }
  78.  
  79.   private TiledLayer createBackground()throws IOException {
  80.     Image image = Image.createImage("/star.png");//创建背景图片
  81.     TiledLayer tiledLayer = new TiledLayer(6, 6, image, 32, 32);//注意:背景的参数的设置!
  82.     tileWidth = 32;
  83.     tileHeight = 32; 
  84.     columns = 6;
  85.     rows = 6;
  86.     mapWidth =tileWidth*columns;
  87.     mapHeight = tileHeight*rows;
  88.     ANI =  tiledLayer.createAnimatedTile(STR);
  89.     int[] map = {//地图数组
  90.        STR,AIR,AIR,ANI,AIR,AIR,
  91.        AIR,MON,STR,AIR,AIR,AIR,
  92.        STR,STR,AIR,AIR,ANI,AIR,
  93.        STR,AIR,ANI,AIR,AIR,AIR,
  94.        AIR,AIR,AIR,STR,AIR,AIR,
  95.        AIR,AIR,AIR,STR,AIR,AIR,
  96.     };//显示地图
  97.     for (int i = 0; i < map.length; i++) {
  98.       int column = i % columns;
  99.       int row = (i - column) / columns;
  100.       tiledLayer.setCell(column, row, map[i]);//通过一个循环来设置tiledLayer
  101.     }
  102.     //tiledLayer.setAnimatedTile(SHN,STR);
  103.     
  104.    // tiledLayer.setCell(4,5, aniStarIndex);
  105.     
  106.     return tiledLayer;//返回
  107.   }
  108.   
  109.   private void render(Graphics g){
  110.     //mLayerManager.paint(g, 0, 0);
  111.     mBackground.paint(g);
  112.     flushGraphics();
  113.   
  114.   }
  115.   synchronized void stop()
  116.   {
  117.     isRun=false;
  118.   }
  119.   public void commandAction(Command c, Displayable d)
  120.   {
  121.     //if any Exit key is pressed then exit
  122.     if(c==exit)
  123.     {
  124.       midlet.exitMidlet();
  125.     }
  126.   }
  127.  
  128.  
  129. }