📄 microtankcanvas.java
字号:
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class MicroTankCanvas extends GameCanvas implements Runnable {
private volatile boolean mTrucking;
private MicroTankSprite mTank;
//声明图层管理对象
private LayerManager mLayerManager;
//构造函数
public MicroTankCanvas() throws IOException {
super(true);//抑制键盘
//创建坦克精灵对象
mTank = createTank();
//设置精灵的位置
mTank.setPosition(0, 24);
//创建图层管理对象
mLayerManager = new LayerManager();
//将精灵添加到图层管理中
mLayerManager.append(mTank);
}
//定义创建代表坦克的游戏精灵对象的方法
private MicroTankSprite createTank() throws IOException {
//加载Sprite的源图像
Image image = Image.createImage("/tank.png");
return new MicroTankSprite(image, 32, 32);
}
//启动线程
public void start() {
mTrucking = true;
Thread t = new Thread(this);
t.start();
}
public void run() {
Graphics g = getGraphics();
//设置游戏循环时间
int timeStep = 80;
while (mTrucking) {
long start = System.currentTimeMillis();
input();
render(g);
long end = System.currentTimeMillis();
int duration = (int)(end - start);
if (duration < timeStep) {
try { Thread.sleep(timeStep - duration); }
catch (InterruptedException ie) { stop(); }
}
}
}
//响应用户的按键事件
private void input() {
int keyStates = getKeyStates();
if ((keyStates & LEFT_PRESSED) != 0) mTank.turn(-1);
else if ((keyStates & RIGHT_PRESSED) != 0) mTank.turn(1);
else if ((keyStates & UP_PRESSED) != 0) mTank.forward(2);
else if ((keyStates & DOWN_PRESSED) != 0) mTank.forward(-2);
}
//绘制屏幕
private void render(Graphics g) {
int w = getWidth();
int h = getHeight();
//填充屏幕
g.setColor(0xffffff);
g.fillRect(0, 0, w, h);
int x = (w - 160) / 2;
int y = (h - 160) / 2;
//绘制图层
mLayerManager.paint(g,x,y);
g.setColor(0x000000);
g.drawRect(x, y, 160, 160);
//绘制精灵到屏幕上
flushGraphics();
}
public void stop() {
mTrucking = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -