📄 gamemain.java
字号:
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
public class GameMain extends GameCanvas{
private static final long MILLS_PER_FRAME = 50; // 游戏刷新时间
public static final int LEFT_SOFT = -6;
public static final int RIGHT_SOFT = -7;
public static final int STATE_LOGO = 1;
public static final int STATE_MENU = 2;
public static final int STATE_PLAY = 3;
private int iGameState = STATE_LOGO;
// private int iGameState = STATE_LOGO;
private int iAction;
public final int WIDTH, HEIGHT; // 设置游戏画布大小
public Graphics gameGraphics; // GameMain的Graphics(画笔)
Logo logo;
Menu menu;
GamePlay gamePlay;
GameMIDlet gameMIDlet;
protected GameMain(GameMIDlet mid) { // 构造方法
super( false );
setFullScreenMode( true );
gameMIDlet = mid;
gameGraphics = this.getGraphics(); // 获取GameMain的Graphics
WIDTH = this.getWidth(); HEIGHT = this.getHeight();
logo = new Logo(this);
}
private final int convertKey(int keyCode) {
if (keyCode >= Canvas.KEY_NUM0 && keyCode <= Canvas.KEY_NUM9 ||
keyCode == LEFT_SOFT || keyCode == RIGHT_SOFT ||
keyCode == Canvas.KEY_POUND || keyCode == Canvas.KEY_STAR) {
return keyCode;
} else {
return getGameAction(keyCode);
}
}
public void keyReleased(int keyCode) {
iAction = convertKey( keyCode );
switch(iGameState){
case STATE_LOGO:
break;
case STATE_MENU:
break;
case STATE_PLAY:
gamePlay.keyReleased( iAction );
break;
}
}
public void keyPressed(int keyCode){ // 按键事件处理方法
iAction = convertKey( keyCode );
switch(iGameState){
case STATE_LOGO:
logo.keyPressed( iAction );
break;
case STATE_MENU:
menu.keyPressed( iAction );
break;
case STATE_PLAY:
gamePlay.keyPressed( iAction );
break;
}
}
/*
* 游戏主循环
*/
private boolean bRun = true;
public final void gameLoop() { // 游戏主循环方法
long time_old, time_elapsed = 0;
while(bRun){
time_old = System.currentTimeMillis(); // currentTimeMillis()方法取得系统参考时间
update( time_elapsed );
render();
time_elapsed = System.currentTimeMillis() - time_old; // 用掉的时间值
if( MILLS_PER_FRAME > time_elapsed ){ // 休眠掉每帧update和render后用剩的时间
try {
Thread.sleep( MILLS_PER_FRAME - time_elapsed );
} catch (InterruptedException e) {
}
time_elapsed = MILLS_PER_FRAME; // 用掉的时间设在预定每帧消耗的时间
}
}
}
/*
* 游戏绘图方法
*/
private final void render() {
switch(iGameState){
case STATE_LOGO:
logo.render();
break;
case STATE_MENU:
menu.render();
break;
case STATE_PLAY:
gamePlay.render();
break;
}
flushGraphics();
}
/*
* 游戏逻辑更新方法
*/
private long total_time_elapsed; // 累计游戏循环总运行时间
private final void update(long time_elapsed) {
total_time_elapsed += time_elapsed;
switch(iGameState){
case STATE_LOGO:
logo.update( time_elapsed );
break;
case STATE_MENU:
menu.update( time_elapsed );
break;
case STATE_PLAY:
gamePlay.update( time_elapsed );
break;
}
}
public void stateChange( int newState ) {
switch(iGameState){
case STATE_LOGO:
if( newState == STATE_MENU ){
logo.freeImages();
menu = new Menu(this);
}
break;
case STATE_MENU:
if( newState == STATE_PLAY ){
if( gamePlay == null )
gamePlay = new GamePlay(this);
menu.freeMenuImages();
}
break;
}
iGameState = newState;
}
public void exit() {
bRun = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -