是否可以在实现Runnable接口的类中修改属性?
我在实现Runnable接口的GamePanel类中创建了一个游戏循环。 但是,正如我所料,不可能像这样修改布尔属性:
public class GamePanel extends SurfaceView implements Runnable {
private volatile boolean _isPaused;
public synchronized void setPause(boolean b) {
_isPaused = b;
}
public synchronized boolean getPause() {
return _isPaused;
}
@Override
public void run() {
while (!_isPaused)
draw();
}
public void draw()
{
if (_isPaused)
drawPauseScreen();
else
drawGameScreen();
}
}
在我的MainActivity中,我有一个监听器附加到一个简单的按钮:
private View.OnClickListener buttonPauseListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
_gamePanel.setPause(!_gamePanel.getPause());
}
};
当我点击暂停按钮时,布尔值会被更改,但是点击它会不再改变布尔值。
答案 0 :(得分:1)
你可以在你做的时候更改布尔值,但我不介意遵循最佳做法。
你当前的问题是你退出while循环,因此只要你将布尔值更改为true就不再运行runnable,因此它不再绘制了。
编辑: 我建议使用AtomicBoolean来使代码更清晰。