📄 gamescreen.java
字号:
package com.j2medev.chapter5.game;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.Random;
final class GameScreen extends GameCanvas implements Runnable {
private Graphics graphics; //保存图形环境实例
private boolean runningFlag = false; //线程运行标志
private static final long TIME_PER_FRAME = 100;// 每一帧的周期
private int width;//屏幕宽度
private int height;//屏幕高度
private Random random = new Random(); //设置一个随机数;
public static final int BLUE = 0x000000ff;
private int x,y,vx,vy;
String str="J2ME游戏世界";
GameScreen(boolean flag) { //构造方法;
super(flag);
graphics = getGraphics();//取得图形环境实例
width = getWidth();
height = getHeight();
init();
}
void init() { //初始化游戏数据;
x=width/2;
y=height/2;
vx=random.nextInt(2)+1;//nextInt(int i)定义在cldc 1.1中
vy=random.nextInt(2)+1;
}
private void input() { //处理输入
}
private void logic() { //更新逻辑
x+=vx;
y+=vy;
Font font=graphics.getFont();
if(x<=0||x+font.stringWidth(str)>=width){
vx=-vx;
}
if(y<=0||y+20>=height){
vy=-vy;
}
}
private void render(Graphics g) { //渲染画面
g.setColor(BLUE);
g.fillRect(0, 0, width, height);
g.setColor(0x00ffffff);
g.drawString(str,x,y,Graphics.LEFT|Graphics.TOP);
}
public synchronized void start() {
if (!runningFlag) {
runningFlag = true;
Thread th = new Thread(this);//启动线程
th.start();
}
}
public synchronized void stop() {
runningFlag = false;
}
public void run() {
while (runningFlag) {
long startTime = System.currentTimeMillis();
input();
logic();
render(graphics);
flushGraphics();//更新显示屏幕
long elapsedTime = System.currentTimeMillis() - startTime;
//如果运行时间间隔小于每帧的时间,那么让线程休眠
if (elapsedTime < TIME_PER_FRAME) {
try {
Thread.sleep(TIME_PER_FRAME - elapsedTime);
} catch (InterruptedException ex) {
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -