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

为什么暂停功能的正确实现会跟混淆级别有关系?
我的一个游戏程序的主Canvas有形如下面的代码:
public   void   run()   {
    ...   ...
    while(true)   {
            if   (paused)   continue;//用布尔变量paused表示当前处于暂停状态与否
            //游戏的每一帧的处理过程在此:
            ...   ..
            //:处理过程结束
            Thread.sleep(66);
    }
}

public   void   keyPressed(int   keyCode)   {
    int   gameKey=getGameAction(keyCode);
    if   (gameKey==...)   {
          ...   ...
    }
    else   if   (gameKey==Canvas.GAME_C)   {
          paused=!paused;
    }
}
也就是说当按下游戏键C时,就会改变当前的暂停状态.
然而编译运行时发现了一个奇怪的现象(我用的IDE是NetBeans5.5):当选择混淆级别为0即无混淆时,按游戏C键可以正常地使游戏进入暂停状态;   但当有混淆时,按下C键则不能进入暂停状态;   而且,如果进入单步调试运行方式,则即使有混淆,也能正常暂停.
甚是不解.

------解决方案--------------------
up
------解决方案--------------------
up
------解决方案--------------------
把pause定义成 volatile 试试。