2017-07-31 9 views
2

次の質問は非常に具体的ですが、私は私の問題の解決に1時間以上を要望しています。 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も表示されます。しかし、ユーザーが正しいスプライトをタップするとゲームを続行したい、そしてゲームを終了したい、つまり、ユーザーが3秒以内に画面上の何かをタップしていない場合、GameOverScreenを表示することを意味する。

+0

私は何らかの種類のタイマーがあると仮定しているので、正しいことに触れたときに真に設定されたブール値を持っています。タイマーが終了したら、trueの場合はfalseに設定します – Zoe

答えて

0

あなたが求めていることを理解するのは少し難しいですが、あなたの目標は、ユーザーが少なくとも3秒で1回は画面に触れることだと思います。この時間にユーザーが触れなかった場合、画面上のゲームが表示されます。ユーザーが画面に触れ、正しい色のスプライトにタッチした場合、タッチ時間に3秒を追加します。その後、ユーザーが少なくとも1つの右スプライトをタッチして3秒以内にタッチできなかった場合、レベル完了画面に移動します。

GameOverScreenに注目しましょう。この画面では、ゲームオブジェクト、スコア、ゲームが終了したか完了したかを示すブール値を取る必要があります。今、私たちはlastTouchedと呼ばれるゲームにタイマーを追加することができます完了し、終了画面を持って

GameOverScreen(game,score,true); // game completed or 
GameOverScreen(game,score,false); // game over 

:次にあなたがゲーム画面を呼び出すことができ、我々が知っているので、

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 
    } 
} 
関連する問題