是否可以跨时间修改实现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());
}
};当我单击pause按钮时,布尔值会更改,但再次单击它不会再更改布尔值。
发布于 2016-04-03 05:49:28
您可以像这样更改布尔值,但在我看来,这并不符合最佳实践。
您当前的问题是您退出了while循环,因此runnable不再运行,只要您将布尔值更改为true,它就不再绘制。
编辑:我建议使用AtomicBoolean来使代码更清晰。
https://stackoverflow.com/questions/36379029
复制相似问题