在我的游戏中,我想在输掉或赢得关卡后将屏幕绘制为黑色,然后在屏幕上绘制一条白色消息。延迟几秒钟后,我希望屏幕在触摸时消失。下面是我的draw()方法的一部分。问题是,即使 sleep 命令是在绘制文本和 Canvas 之后,在屏幕被绘制为黑色并绘制文本之前,屏幕会卡住(或线程 hibernate )。有什么想法为什么会发生这种情况吗?
if (state == WIN || state == LOSE){
canvas.drawColor(Color.BLACK);
message = "Touch Screen To Start";
canvas.drawText(message + "", mCanvasWidth / 2, mCanvasHeight / 2, white);
try {
GameThread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
最佳答案
我有一种感觉,canvas 函数在返回之前实际上不会显示任何内容。特别是如果您在具有硬件加速的 Android >3.0 上运行,或者任何具有双缓冲的配置,则在完成之前它实际上不会更新屏幕。
相反,当您绘制黑屏时,请存储当前时间。像这样的东西:
mStartTime = System.currentTimeMillis();
然后在监视按下的函数中,检查已经过去了多少秒并查看是否有足够的时间,例如:
if( (System.currentTimeMillis() - mStartTime)/1000 > 5){
//Put code here to run after 5 seconds
}
这应该绘制您的文本并避免阻塞 Ui 线程(在各个方面都是一个很大的禁忌)。
关于java - 在 Canvas 中 hibernate 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697722/