📄 star_canvas.java
字号:
package ch08;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class Star_Canvas
extends GameCanvas
implements Runnable {
//声明一个代表运行状态的布尔型变量
private boolean mTrucking;
//声明一个代表图形放大、缩小变换速度的长整型变量
private long mFrameDelay;
//代表图形中心点坐标
private int mX, mY;
//控制图形线段长度和旋转
private int mState;
/*
4.构造器
*/
public Star_Canvas() {
super(true);
mX = getWidth() / 2;
mY = getHeight() / 2;
mState = 0;
mFrameDelay = 20;
}
/*
5.启动线程
*/
public void start() {
mTrucking = true;
Thread t = new Thread(this);
t.start();
}
/*
6.停止线程
*/
public void stop() {
mTrucking = false;
}
/*
7.实现线程run()方法
*/
public void run() {
Graphics g = getGraphics();
while (mTrucking == true) {
tick();
input();
render(g);
try {
Thread.sleep(mFrameDelay);
}
catch (InterruptedException ie) {
stop();
}
}
}
/*
8.设置图形线段长度/角度变化
*/
private void tick() {
mState = (mState + 1) % 30;
}
/*
9.响应输入按键
*/
private void input() {
int keyStates = getKeyStates();
if ( (keyStates & LEFT_PRESSED) != 0) {
mX = Math.max(0, mX - 1);
}
if ( (keyStates & RIGHT_PRESSED) != 0) {
mX = Math.min(getWidth(), mX + 1);
}
if ( (keyStates & UP_PRESSED) != 0) {
mY = Math.max(0, mY - 1);
}
if ( (keyStates & DOWN_PRESSED) != 0) {
mY = Math.min(getHeight(), mY + 1);
}
}
/*
10.绘制图形
*/
private void render(Graphics g) {
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x0000ff);
g.drawLine(mX, mY, mX - 10 + mState, mY - 10);
g.drawLine(mX, mY, mX + 10, mY - 10 + mState);
g.drawLine(mX, mY, mX + 10 - mState, mY + 10);
g.drawLine(mX, mY, mX - 10, mY + 10 - mState);
flushGraphics();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -