2017-07-31 44 views
2

对不起,以下问题非常具体,但我正在寻找超过一个小时来解决我的问题:精灵更改其颜色每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; 
       } 
      } 

此代码的工作部分是:如果用户doesn't触摸屏,那么GameOverScreen将被显示。但是如果用户点击正确的颜色(=精灵),那么GameOverScreen也会显示。但是,如果用户敲击右侧精灵,我想要游戏继续,并且我想结束游戏,这意味着显示GameOverScreen,如果用户在三秒钟内没有在屏幕上点击任何东西。

+0

我假设有某种计时器,所以当你触及正确的事物时,你有一个布尔值,你设置为true。当计时器结束时,如果它为真,则将其设置为false – Zoe

回答

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 
    } 
} 
相关问题