java如何实现游戏暂停和恢复_Android:游戏循环暂停/恢复问题

通过制作我的游戏线程(与surfaceview保持/同步)wait / notifyAll,我可以暂停/恢复我的游戏 . 这一切都运行在游戏暂停按钮 .

但是,当我点击主页/后退按钮时,我可以暂停我的游戏,但是当我通过点击其图标恢复游戏时,我会收到非响应式游戏画面给我 .

我已将日志放在OnResume()方法上,但在LogCat中没有打印任何内容!如果我点击我的游戏屏幕,我会在游戏活动中收到错误对话框“强制关闭”或“等待” .

为什么我得到这个无响应的屏幕,好像我的应用程序暂停后挂起?如何以与游戏暂停/恢复按钮相同的方式处理物理按钮?

这是我的logcat操作视图 . 你可以看到onResume sop没有被打印类似于onPause .

89d61a87-250a-47f1-8fac-1c68ce98a434.png

编辑:由我的暂停/恢复按钮和onPause / onResume函数调用的代码,其中“this”是线程类本身

protected void setPause(){

synchronized (this) {

isPaused = true;

}

}

protected void setResume(){

synchronized (this) {

isPaused = false;

this.notifyAll();

}

}

游戏循环代码:

synchronized (this) {

while (running) {

if (isPaused) {

try {

this.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else {

Canvas c = null;

try {

c = view.getHolder().lockCanvas();

synchronized (view.getHolder()) {

view.onDraw(c);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

if (c != null) {

view.getHolder().unlockCanvasAndPost(c);

}

}

sleepTime = ticksPS

- (System.currentTimeMillis() - startTime);

try {

if (sleepTime > 0)

sleep(sleepTime);

else

sleep(10);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

这是我如何从表面视图调用它:

public void surfaceCreated(SurfaceHolder holder) {

// start the game loop

System.out.println("Starting Game Loop @@@@@@@@@");

if(isPaused){

System.out.println("GamePaused");

gameLoopThread.setResume();

}

else{

System.out.println("Game Starting");

gameLoopThread.setRunning(true);

}

gameLoopThread.start();

}

编辑2:如果我使用暂停按钮暂停我的游戏并让我的手机自动锁定...恢复后我可以正常播放没有任何问题 . 根据日志,我看到在这种情况下不会调用被破坏的表面 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值