Ist es möglich, ein Attribut aus einer Klasse, die die Runnable-Schnittstelle implementiert, über die Zeit hinweg zu ändern?Ändern eines Runable-Klassenattributs über die Zeit
Ich habe eine Game-Loop in einer GamePanel-Klasse erstellt, die die Runnable-Schnittstelle implementiert. jedoch, wie ich erwartet hatte, es unmöglich ist, eine Boolesche Attribut wie folgt zu ändern:
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();
}
}
In meinem MainActivity, ich habe einen Zuhörer zu einem einfachen Knopf angebracht:
private View.OnClickListener buttonPauseListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
_gamePanel.setPause(!_gamePanel.getPause());
}
};
Wenn ich auf die Pause-Taste, der Boolesche Wert wird geändert, aber das Klicken auf eine Sekunde wird den Booleschen Wert nicht mehr ändern.
Sie setzen immer den _isPaused Wert, in der onClick sollten Sie dies nicht tun? _gamePanel.setPause (! _ gamePanel.getPause()); – jonathanrz
Ich habe den Code bearbeitet, es war ein Tippfehler. Ich habe: _gamePanel.setPause (! _ GamePanel.getPause()); und das funktioniert nicht –