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

J2ME

开发平台:

Java

  1. // Any use of this code and/or information below is subject to the
  2. // license terms: http://wireless.java.sun.com/berkeley_license.html
  3. import java.io.IOException;
  4. import javax.microedition.lcdui.*;
  5. import javax.microedition.lcdui.game.*;
  6. //MicroTankCanvas 扩展GameCanvas引用Runnable接口
  7. public class MyCanvas    extends GameCanvas    implements Runnable {
  8.   private boolean isRun;//声明一个布尔变量mTrucking
  9.   private Sprite mTank;
  10.   private int curX = 0,curY = 0;
  11.   private int canvasWidth,canvasHeight;
  12.   private int AniCounter = 0;
  13.   private int mDirection = 0;
  14.   private static final int[] kFrameLookup = {
  15.     0, 1, 2, 
  16.     0, 1, 2, 
  17.     0, 1, 2, 
  18.     0, 1, 2, 
  19.     };//12
  20.     private static final int[] kTransformLookup = {//旋转位置矩阵
  21.     Sprite.TRANS_NONE, Sprite.TRANS_NONE, Sprite.TRANS_NONE,
  22.     Sprite.TRANS_ROT90, Sprite.TRANS_ROT90, Sprite.TRANS_ROT90,
  23.     Sprite.TRANS_ROT180, Sprite.TRANS_ROT180, Sprite.TRANS_ROT180,
  24.     Sprite.TRANS_ROT270, Sprite.TRANS_ROT270, Sprite.TRANS_ROT270,
  25.   };
  26.   public MyCanvas() throws IOException {//构造函数
  27.     super(true);//抑制键盘
  28.     canvasWidth = this.getWidth();
  29.     canvasHeight = this.getHeight();
  30.     try{
  31.     createTank();
  32.     }catch(IOException e){
  33.       System.out.println("error");
  34.     }
  35.     curX = (canvasWidth-mTank.getWidth())/2;
  36.     curY = (canvasHeight-mTank.getHeight())/2;
  37.     mTank.setRefPixelPosition(16,16);
  38.     
  39.   
  40.   }
  41.   
  42.   private void createTank() throws IOException {
  43.     Image image = Image.createImage("/tank.png");
  44.     mTank = new Sprite(image, 32, 32);
  45.   }
  46.   
  47.   public void start() {//开始
  48.     isRun = true;
  49.     Thread t = new Thread(this);//线程
  50.     t.start();//线程开始
  51.   }
  52.   
  53.   public void run() {
  54.     Graphics g = getGraphics();
  55.     
  56.     int timeStep = 80;
  57.     
  58. while (isRun) {
  59.       long start = System.currentTimeMillis();
  60.       tick();
  61.       render(g);
  62.       
  63.       long end = System.currentTimeMillis();
  64.       int duration = (int)(end - start);
  65.       if (duration < timeStep) {
  66.         try { Thread.sleep(timeStep - duration); }
  67.         catch (InterruptedException ie) {}
  68.       }
  69.     }
  70.   }
  71.   
  72.   private void tick() {
  73.     AniCounter+=1;
  74.     mDirection = AniCounter%24;
  75.     mTank.setFrame(kFrameLookup[mDirection/2]);
  76.     mTank.setTransform(kTransformLookup[mDirection/2]);
  77.   }
  78.   
  79.  
  80.   
  81.   private void render(Graphics g) {
  82.     g.setColor(0xffffff);//设置屏幕背景颜色
  83.     g.fillRect(0, 0, canvasWidth, canvasHeight);//用背景颜色填充全屏幕
  84.     mTank.setPosition(curX, curY);
  85.     mTank.paint(g);
  86.     flushGraphics();//闪
  87.     
  88.   }
  89.   
  90.  
  91.   public void stop() {//停止
  92.     isRun = false;
  93.   }
  94. }