我正在制作一个游戏,如果玩家与熊相交,它将停止可运行的线程。但不知何故,它不会停下来。所以当玩家与熊相交时,玩家应该死亡。死循环被调用,但不会停止可运行。 我做了可运行的循环,如下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