📄 ocanvas.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 + -