我正在製作一個遊戲,如果玩家與熊相交,它將停止可運行的線程。但不知何故,它不會停下來。所以當玩家與熊相交時,玩家應該死亡。死循環被調用,但不會停止可運行。 我做了可運行的循環,如下Runnable不會停止
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();
}
});
}
我嘗試了很多,但我仍然會再打上每5ms。
我的控制檯環路這樣
> 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
即使我的成績一直在死功能後增加每次被稱爲
scorebox.setText(countscore + "");
如何停止該運行的線程?
你在哪裏'.start()'新的可運行?可能是因爲我的活動一開始,就會通過主線程作爲普通函數調用 –
運行它,可啓動運行。 。從未做過任何.start() – Pujan
@Gilad - runnable通過處理程序啓動..... – Opiatefuchs