我现在要做的是一个过场动画。要把主画面切换掉,换成一个显示信息的页面,然后再调回来,但是现在调回来得时候失效了,paint() 没有执行了
…………
上面一堆初始化的东西,然后调用游戏的主循环
当满足条件进入下一关的时候切换游戏画面,问题就是出现在画面调回来得时候 gameState=GAME_SUSPEND;
public synchronized void run() {
while(threadAlive){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(gameState == GAME_RUN){
input();
if(TICK_COUNT%((5-SPEED)*2)==0)
{
snaketick();
}
tick();
TICK_COUNT ++;
if(score> =PLAYER_LEVEL*1)
{
gameState=GAME_SUSPEND;
}
}
paint(graphics);
}
}
…………
这里是 paint()的方法 我以前用同样的方法做过2D游戏的切换,没有问题,我这边渲染的是world,不知道有没有什么不同,不过我想因该不是这个问题,gameState=GAME_SUSPEND 以后 在paint()里面会把 gameState 变成 GAME_INIT,这样他在调回来的时候会重新初始化一些参数,没有重新加栽地图(不过我也重新加栽地图过,也一样无效)
public synchronized void paint(Graphics g)
{
if(gameState == GAME_INIT){
if(!COMMAND_ADD_FLAG){
//添加响应命令及监听器
this.addCommand(pauseCommand);
this.addCommand(exitCommand);
this.setCommandListener(this);
COMMAND_ADD_FLAG = true;
}
……
gameState = GAME_RUN;
}else if(gameState == GAME_RUN){
if(rt.freeMemory() < (rt.totalMemory() * 4 / 5)){
rt.gc();
}
}else if(gameState == GAME_SUSPEND){
rt.gc();
if(PLAYER_LEVEL > = 4){
gameState = GAME_OVER;
}else{
PLAYER_LEVEL ++;
controller.EventHandler(Controller.EVENT_NEXTROUND);
gameState = GAME_INIT;
this.unActive();
}
}else if(gameState == GAME_OVER){
……
}
draw3D(g);
draw2D(g);
flushGraphics();
}
public void draw3D(Graphics g){
try{
graphics3D.bindTarget(g);
graphics3D.render(world);
}
catch(Exception e)
{System.out.println( "bindTarget error ");}
finally
{graphics3D.releaseTarget(); }
}
private void draw2D(Graphics g) {