📄 gameloop.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.Image;
import java.io.*;
public class GameLoop extends GameCanvas implements Runnable {
private boolean mTrucking;
private long mFrameDelay;
private int screenWidth,screenHeight,mX, mY;
private Image img;
private Terrain terrain;
private Helicopter player;
private Flight midlet;
private Command pauseCommand;
private Command resumeCommand;
private Command exitCommand;
public GameLoop(Flight midlet) {
super(true);
this.midlet = midlet;
screenWidth = getWidth();
screenHeight = getHeight();
mX = screenWidth / 2;
mY = screenHeight * 2 / 3;
mFrameDelay = 15;
player = new Helicopter();
try{ // I was so frustrated at the moment when i got to know
img = Image.createImage("/res/brick.png"); //i have no idea to avoid the ugly inintialize codes
}catch(IOException ioe){ // out of the constructor of the class Terrain
ioe.printStackTrace();
}
terrain = new Terrain(screenWidth/4 , screenHeight/12 + 2,img,4,12,player);
pauseCommand = new Command("PAUSE",Command.STOP,1);
resumeCommand = new Command("RESUME",Command.SCREEN,1);
exitCommand = new Command("EXIT",Command.EXIT,1);
}
public void start() {
mTrucking = true;
Thread t = new Thread(this);
t.start();
}
public void stop() {
mTrucking = false;
}
public void run() {
Graphics g = getGraphics();
while (mTrucking == true) {
input();
render(g);
if(terrain.collides() == true && player.dying == false)player.dying = true;
if(player.alive == false){stop();midlet.addHighScore(getScore());}
try {
Thread.sleep(mFrameDelay);
} catch (InterruptedException ie) {
}
}
}
private void input() {
int keyStates = getKeyStates();
if ((keyStates & FIRE_PRESSED) != 0 )
mX = Math.max(0, mX - 1);
else mX = Math.min(getWidth()-10, mX + 1);
}
private void render(Graphics g) {
g.setColor(0x000000);
g.fillRect(0,0,screenWidth,screenHeight);
terrain.paint(g);
terrain.update(); // update the terrain seemly,i think that's the best way
player.moveto(mX,mY);
player.paint(g);
player.update();
g.setColor(0xff0000);
g.drawString(String.valueOf(terrain.milemeter),20,20,0);
flushGraphics();
}
public int getScore(){
return terrain.milemeter;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -