Java 如何暂停和恢复GameLoop?
暂停后我无法恢复比赛。我正在使用SurfaceView,下面是代码中最重要的部分:Java 如何暂停和恢复GameLoop?,java,android,surfaceview,resume,game-loop,Java,Android,Surfaceview,Resume,Game Loop,暂停后我无法恢复比赛。我正在使用SurfaceView,下面是代码中最重要的部分: void pause() { if (!pause) { gameLoopThread.setRunning(false); pause = !pause; System.out.println("pause"); } else { gameLoopThread.setRunning(true); System
void pause() {
if (!pause) {
gameLoopThread.setRunning(false);
pause = !pause;
System.out.println("pause");
}
else {
gameLoopThread.setRunning(true);
System.out.println("end pause");
pause = !pause;
}
}
public GameView(Context context) {
super(context);
gameLoopThread = new GameLoopThread(this);
getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//createSprites();
gameLoopThread.setRunning(true);
gameLoopThread.start();
thread1.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height)
{
}
当我第一次使用“暂停”时,游戏将停止,但当我尝试第二次使用“暂停”恢复游戏时,它不起作用,但我在日志中打印了“结束暂停”。通常情况下,你不会暂停整个线程以暂停游戏。当您更新时,渲染通常应该有任何类型的增量时间对象,您应该为您的增量时间对象实现一个新组件,称为类似时间刻度的东西。时间刻度只是将时间增量自身叠加,以返回修改后的增量时间。所以现在如果你想暂停你的游戏,只需将时间刻度设置为0,你就什么都不做了,你仍然可以运行更新、渲染队列来修改东西、动画或其他任何东西 另一种方法可以是,给每个实体(比如在基本实体中)一个暂停属性。然后你通过你的实体发送一条消息,比如pausegame,并且paused属性get被设置为true。在ur基本实体的虚拟更新中,只需检查暂停和if set return
第二个是更高级的一个,与第一个相比有一些支撑优势,但如果它存在的话,至少需要一个良好的实体/组件概念设计。我想GameLoopThread是从Thread继承的自定义类。你能给我们看一下这个类中用于暂停的代码吗?你看过堆栈跟踪以查看线程状态吗?