- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚写了一些小游戏,问题是,每次我在游戏过程中锁屏然后解锁,游戏就会卡住。我不知道为什么,但它确实发生了。
现在我想知道我必须更改哪种方法来设置游戏在屏幕锁定时暂停或恢复。
是否有像 onScreenLocked() 或 onScreenWake() 这样的方法?
我有三个类,mainactivity 将 gameview 添加到它自己的 View 中。此 gameview 有一个 gamethread,它不断更新 gameview 本身。
现在,当在主 Activity 上调用 onPause() 时,它会调用 gameView.pause();方法。
就是这个方法(gameview.pause()):
public void pause() {
isPaused = true;
gameThread.pause();
}
当 isPaused = true 时,游戏会不断更新。如果不是,那也不是。
当 mainActivity 上的 onResume() 被调用时 gameView.resume();方法被调用,看起来像这样:
public void resume() {
gameThread = new GameThread(this);
gameThread.startThread();
isPaused = false;
}
是的,就是这样。现在,当在游戏过程中按下主页按钮时,它会暂停,而当重新进入游戏时,它只会从结束的地方继续。
但是当按下锁定按钮,然后解锁屏幕时,我只是看到游戏卡住,我不知道为什么。
我发现解锁屏幕时游戏线程不再运行。我不知道如何解决它,因为添加一些
gameThread.start();
游戏会崩溃。但为什么游戏线程在锁屏时停止工作,但在离开游戏并重新进入游戏时却能正常工作?
编辑:
我刚刚发现了我的问题。我的 gameView 代码看起来像这样:
public class GameView extends SurfaceView implements OnGestureListener{
public GameView(Context context, Activity activity) {
super(context);
gameThread = new GameThread(this);
init();
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
gameThread.setRunning(true);
gameThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
});
}
public void init() {
}
public void update() {
}
public void draw(Canvas canvas) {
super.draw(canvas);
}
public void pause() {
isPaused = true;
gameThread.setRunning(false);
}
public void resume() {
gameThread = new GameThread(this);
gameThread.startThread();
}
}
我发现
public void surfaceCreated(SurfaceHolder holder) {
gameThread.setRunning(true);
gameThread.start();
}
只是在按下主页并重新进入游戏时被调用,但在锁定屏幕并再次解锁时不会。这就是线程无法启动的原因。
现在我想知道如何手动调用这个方法?
最佳答案
您应该能够使用 onPause() 和 onResume()。查看 Activity 生命周期了解更多信息。
关于android - 屏幕锁定和解锁时游戏卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22230165/
我是一名优秀的程序员,十分优秀!