📄 testcanvas.java
字号:
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class TestCanvas extends GameCanvas implements Runnable {
private TiledLayer wall;
private Sprite hWorker;
private Sprite vWorker;
private int[] backArray= { //背景数组
1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,
};
//搬运工在不同方向上的帧序列
private int[] leftSequence = {3, 4, 5};
private int[] rightSequence = {9, 10, 11};
private int[] downSequence = {6, 7, 8};
private int[] upSequence = {0, 1, 2};
//绘图对象
private Graphics g;
//搬运工运动区域位置
private int regionX;
private int regionY;
//搬运工线程
private Thread workerThread;
private boolean running = false;
private int hd = 3; //水平移动距离
private int vd = 2; //垂直移动距离
public TestCanvas() {
super(false);
try {
//创建并初始化背景
Image imgWall = Image.createImage("/Storage.png");
wall = new TiledLayer(10, 10, imgWall, 21, 21);
for(int i=0; i<backArray.length; i++) {
wall.setCell(i%10, i/10, backArray[i]);
}
//创建并初始化水平运动的搬运工
Image imgWorker = Image.createImage("/Worker.png");
hWorker = new Sprite(imgWorker, 21, 21);
hWorker.setFrameSequence(leftSequence);
//创建并初始化垂直运动的搬运工
vWorker = new Sprite(hWorker);
vWorker.setFrameSequence(downSequence);
}
catch(IOException ioe) {
}
g = getGraphics();
}
//画面显示前自动调用该方法,初始化背景、搬运工的位置,绘制背景
//创建并启动搬运工线程
public void showNotify() {
int x = (getWidth()-210)/2;
int y = (getHeight()-210)/2;
regionX = x+21;
regionY = y+21;
wall.setPosition(x, y);
wall.paint(g);
hWorker.setPosition(x+21, y+105);
vWorker.setPosition(x+105, y+21);
workerThread = new Thread(this);
running = true;
workerThread.start();
}
//画面从屏幕上移走时自动调用该方法,停止搬运工线程
public void hideNotify() {
running = false;
}
public void run() {
boolean trans = false;
while(running) {
//碰撞检测
if(vWorker.collidesWith(hWorker, false)) {
vd = -vd;
tranceDirection(vWorker);
}
else {
if(vWorker.collidesWith(wall, false)) {
vd = -vd;
tranceDirection(vWorker);
}
if(hWorker.collidesWith(wall, false)) {
hd = -hd;
tranceDirection(hWorker);
}
}
//搬运工移动,显示帧序列中的下一帧
vWorker.move(0, vd);
vWorker.nextFrame();
hWorker.move(hd, 0);
hWorker.nextFrame();
//清除搬运工运动区域
g.setColor(0x00FFFFFF);
g.fillRect(regionX, regionY, 168, 168);
//绘制搬运工
hWorker.paint(g);
vWorker.paint(g);
//绘制结果显示到屏幕
flushGraphics();
try {
Thread.sleep(44);
}
catch(InterruptedException ie) {
//
}
}
}
//搬运工worker转向
private void tranceDirection(Sprite worker) {
if(worker == hWorker) {
if(hd > 0) {
worker.setFrameSequence(leftSequence);
}
else {
worker.setFrameSequence(rightSequence);
}
}
else if(worker == vWorker) {
if(vd > 0) {
worker.setFrameSequence(downSequence);
}
else {
worker.setFrameSequence(upSequence);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -