⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ocanvas.java

📁 Java ME手机应用开发大全一书的配套光盘上的源码
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
import java.io.*;
public class OCanvas extends GameCanvas implements Runnable {
  private Display    display;
  private boolean    sleeping;
  private long       frameDelay;
 
  private TiledLayer backgroundLayer;
  private LayerManager mLayerManager;
  private int aniCounter;

  public OCanvas(Display d) {
    super(true);
    display = d;

    // 设定帧频 (33 fps)
    frameDelay = 33;

   
  }
 
  public void start() {
    // 设定这个画布为当前屏幕显示
    display.setCurrent(this);

    // 创建背景图层
    try {
      backgroundLayer = new TiledLayer(6, 6, Image.createImage("/star.png"), 32, 32);
    }
    catch (IOException e) {
      System.err.println("Failed loading images!");
    }

    backgroundLayer.createAnimatedTile(3); 
   // 设定背景图层地图
   int[] layerMap = {
       4,-1,4,4,3, 4,
       -1,4,4,3, 4,3,
       4,4,1,4, -1,4,
       4,-1,3, 4,3,4,
       3,4,3,4,4, 4,
       4,4,3,4,-1, 3,
    };
    for (int i = 0; i < layerMap.length; i++) {
      int column = i % 6;
      int row = (i - column) / 6;
      backgroundLayer.setCell(column, row, layerMap[i]);
    }
    backgroundLayer.setPosition((getWidth() - backgroundLayer.getWidth()) / 2,
      (getHeight() - backgroundLayer.getHeight()) / 2);
    // 开始动画线程
    sleeping = false;
    Thread t = new Thread(this);
    t.start();
  }
 
  public void stop() {
    // 停止动画
    sleeping = true;
  }
  
  public void run() {
    Graphics g = getGraphics();
    
    // 游戏主循环
    while (!sleeping) {
      //更新数据
    update();
     //显示图像
      draw(g);
      try {
        Thread.sleep(frameDelay);
      }
      catch (InterruptedException ie) {}
    }
  }

  private void update() 
{
      aniCounter++;
     if(aniCounter<6)
     { 
    backgroundLayer.setAnimatedTile(-1,3);//设置动画背景为不闪烁的星星
      }          
     else if(aniCounter>6 && aniCounter<12)
     {
    backgroundLayer.setAnimatedTile(-1,2);//当计数器增加到6,显示一次动画
            
    }
     else if(aniCounter>12 && aniCounter<18)
     {
    backgroundLayer.setAnimatedTile(-1,5); //当计数器增加到6,再次显示一次动画
    aniCounter=0;
     }          
  }

  private void draw(Graphics g) {
    // 绘制背景图层
   backgroundLayer.paint(g);
    
    //刷新屏幕显示缓冲区
    flushGraphics();
  }
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -