在我的游戏中,我希望在丢失或赢得关卡后将屏幕画成黑色,然后在屏幕上以白色绘制消息。延迟几秒后,我想让屏幕在触摸时消失。下面是我的draw()方法的一部分。问题是屏幕在屏幕被绘制为黑色并且绘制文本之前冻结(或线程休眠),即使sleep命令在绘制文本和画布之后。任何想法为什么会发生这种情况?
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();
}
}
答案 0 :(得分:2)
我觉得canvas函数在返回之前实际上并没有显示任何内容。特别是如果你在Android> 3.0上使用硬件加速或任何具有双缓冲的配置运行,它将不会实际更新屏幕直到它完成。
相反,当您绘制黑屏时,请存储当前时间。类似的东西:
mStartTime = System.currentTimeMillis();
然后在观看按下的功能中,检查已经过了多少秒,看看是否有足够的时间发生,例如:
if( (System.currentTimeMillis() - mStartTime)/1000 > 5){
//Put code here to run after 5 seconds
}
这应该绘制你的文字并避免阻止Ui线程(在各个方面都是一个大不了)。
答案 1 :(得分:1)
可能是对drawText的调用比你意识到的要花费几分之一秒,并且因为你立即调用了sleep,你实际上是在绘制之前就已经在线程中休眠了。
尝试在睡眠呼叫之前为(i <10000)或其他东西设置一个小循环,看看是否有帮助。
答案 2 :(得分:0)
使用CountDownTimer
http://developer.android.com/reference/android/os/CountDownTimer.html
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
// Here you do check every second = every 1000 milliseconds
}
public void onFinish() {
// Here you can restart game after 30 seconds which is 30K milliseconds.
mTextField.setText("done!");
}
}.start();