2016-04-19 18 views
0

私は、プレイヤーがクマと交差すると、実行可能なスレッドを停止するゲームを作っています。どういうわけかそれはまったく止まらない。だからプレイヤーがクマと交差するとき、プレイヤーは死んでいるはずです。デッドループが呼び出されますが、実行可能ファイルは停止しません。 私は多くのことを試みたが、私はまだ5msごとにコールバックします実行可能停止しない

protected void movement() { 

    final int delay = 5; 
    speed = 20; 

    r = new Runnable() { 

     @Override 
     public void run() { 

      if (countscore % 300 == 0) { 
       speed = speed + 5; 

      } 

      bear1.setY(bear1.getY() + speed); 
      bear2.setY(bear2.getY() + speed); 
      reframeroad(); 

      if ((animImageView.getX() < bear1.getX() + 50 && animImageView.getX() > bear1.getX() - 50) || 
        (animImageView.getX() > bear2.getX() && animImageView.getX() < bear2.getX())) { 
       System.out.println("goes inside getx intersects x "); 
       dead(); 

      } 

      if (Rect.intersects(thiefRect, bear1Rect) || Rect.intersects(thiefRect, bear2Rect)) { 
       System.out.println(" goes inside intersects if loop "); 

       dead(); // this gets called 
      } 

      h.postDelayed(this, delay); 
     } 
    }; h.postDelayed(r, speed); 
} 

public void dead(){ 
    System.out.println("before callbacks null"); 
    h.removeCallbacksAndMessages(r); 

    System.out.println("goes inside dead function"); 

    bear1.setVisibility(View.INVISIBLE); 
    bear2.setVisibility(View.INVISIBLE); 
    animImageView.setVisibility(View.INVISIBLE); 


    scorebox.setText(countscore + ""); 
    scorebox.setVisibility(View.VISIBLE); 
    score.setVisibility(View.VISIBLE); 

    retry.setVisibility(View.VISIBLE); 

    retry.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(GameActivity.this, GameActivity.class)); 
      finish(); 
     } 
    }); 
} 

以下のように実行可能なループを作りました。

私のコンソールが

私は、この実行可能なスレッドを停止するにはどうすればよい
scorebox.setText(countscore + ""); 

と呼ばれる

> 04-19 10:36:40.687 14923-14923/: goes inside getx intersects x 
> 04-19 10:36:40.687 14923-14923/: before callbacks null 
> 04-19 10:36:40.687 14923-14923/: goes inside dead function 
> 04-19 10:36:40.747 14923-14923/: goes inside getx intersects x 
> 04-19 10:36:40.747 14923-14923/: before callbacks null 
> 04-19 10:36:40.747 14923-14923/:goes inside dead function 
> 04-19 10:36:40.807 14923-14923/: goes inside getx intersects x 
> 04-19 10:36:40.807 14923-14923/: before callbacks null 
> 04-19 10:36:40.807 14923-14923/: goes inside dead function 
> 04-19 10:36:40.868 14923-14923/: goes inside getx intersects x 
> 04-19 10:36:40.869 14923-14923/: before callbacks null 
> 04-19 10:36:40.869 14923-14923/: goes inside dead function 

も、私のスコアは死ん関数の後に増加を続け、このたびのようにループ?

h.postDelayed(this, delay); 

をもう一度実行する必要がある場合は起訴する変数を追加してみてください:

+0

ここで、新しい実行可能ファイルを '.start()'していますか?私の活動が始まるとすぐに、通常の関数呼び出し –

+0

としてメインスレッド経由で実行している可能性があります。実行可能ファイルが開始されます。 。 .start() – Pujan

+1

@Gilad - ハンドラを通して実行可能ファイルが起動されます..... – Opiatefuchs

答えて

2

あなたの死んだ()関数は、呼び出す前に呼び出されます。

... 
r = new Runnable() { 

    @Override 
    public void run() { 

     if (countscore % 300 == 0) { 
      speed = speed + 5; 

     } 

     bear1.setY(bear1.getY() + speed); 
     bear2.setY(bear2.getY() + speed); 
     reframeroad(); 

     boolean isDead = false; 

     if ((animImageView.getX() < bear1.getX() + 50 && animImageView.getX() > bear1.getX() - 50) || 
       (animImageView.getX() > bear2.getX() && animImageView.getX() < bear2.getX())) { 
      System.out.println("goes inside getx intersects x "); 
      dead(); 
      isDead = true; 
     } 

     if (Rect.intersects(thiefRect, bear1Rect) || Rect.intersects(thiefRect, bear2Rect)) { 
      System.out.println(" goes inside intersects if loop "); 
      isDead = true; 
      dead(); // this gets called 
     } 
     if (!isDead) { 
      h.postDelayed(this, delay); 
     } 
    } 
}; h.postDelayed(r, speed); 


public void dead(){ 
    //Remove this --> h.removeCallbacksAndMessages(r); 

    System.out.println("goes inside dead function"); 
    .... 
+0

これはうまくいきました。ありがとうございました。 – Pujan

+0

run check booleanは、 –