日期:2014-05-20  浏览次数:20697 次

头大了,求教关于showNotify() 和 hideNotify()的问题
我现在要做的是一个过场动画。要把主画面切换掉,换成一个显示信息的页面,然后再调回来,但是现在调回来得时候失效了,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)   {