我很抱歉以下问题非常具体,但我正在寻找一个多小时来解决我的问题:精灵每隔3秒更改一次颜色。我可以检测用户是否点击了正确的颜色,但我无法检测用户是否只是在等待下一个颜色得分。我尝试了以下代码:
private float timeSeconds = 0f;
private float period = 3f;
timeSeconds += Gdx.graphics.getRawDeltaTime();
for (int i=0;i<4;i++) {
if (executed == true && !(sprite[zahl[i]].getBoundingRectangle().contains(touchPoint.x,
touchPoint.y))&& timeSeconds==0 && zahl[4] != zahl[i]) {
timeSeconds = 0;
this.dispose();
game.setScreen(new GameOverScreen(game, Integer.parseInt(score)));
return;
}
}
此代码部分有效:如果用户未触摸屏幕,则会显示GameOverScreen。但是如果用户tapps正确的颜色(=精灵),那么也会显示GameOverScreen。但是,如果用户点击正确的精灵,我希望游戏继续,并且我想结束游戏,这意味着显示GameOverScreen,如果用户在三秒内没有点击屏幕上的任何内容。
答案 0 :(得分:0)
要理解你的要求有点难,但我认为你的目标是让用户至少在3秒内触摸一次屏幕。如果用户此时未能触摸,则显示屏幕上的游戏。如果用户触摸了屏幕并且触摸了正确的颜色精灵,则为触摸时间添加3秒。然后,如果用户触摸了至少1个右侧精灵并且在3秒内未能触摸,则移动到级别完成屏幕。
让我们用GameOverScreen加注星标。此屏幕应该将您的游戏对象,分数和布尔值表示游戏是否结束或完成。然后你可以用以下方式调用游戏屏幕:
GameOverScreen(game,score,true); // game completed or
GameOverScreen(game,score,false); // game over
现在我们已经完成了结束屏幕,我们可以在你的游戏中添加一个名为lastTouched的计时器:
float lastTouched = 3f; // 3 seconds of touch time
接下来我们添加一个布尔值,以便我们知道用户是否至少触及了一个正确的颜色精灵:
boolean atLeastOneTouched = false;
现在我们用每个帧降低计时器:
lastTouched -= Gdx.graphics.getRawDeltaTime();
我们像往常一样检查你的精灵触摸,没有计时器的东西:
for (int i=0;i<4;i++) {
if (executed == true && !(sprite[zahl[i]].getBoundingRectangle().contains(touchPoint.x,
touchPoint.y)) && zahl[4] != zahl[i]) {
// touched right colour
atLeastOneTouched = true;
lastTouched = 3f; // reset timer
}
}
最后,我们检查计时器是否已用完,然后根据atLeastOneTouched布尔值获取屏幕:
if(lastTouched <= 0){
if(atLeastOneTouched){
GameOverScreen(game,score,true); // game over complete
}else{
GameOverScreen(game,score,false); // game over failed
}
}