我正在創建一個簡單的點擊遊戲,在屏幕上產生敵人,當用戶點擊它們時,他們獲得點數並且敵人被摧毀。我這樣做是爲了在用戶點擊它們時使圖像框可見並且不可見。他們運行在一個計時器上,並有一個不斷的產卵循環。Android工作室:TimerTask
目前我想實現一種方式,用戶將開始失去健康。所以我想檢查一下敵人的影像箱是否可見,如果是的話,玩家會慢慢失去健康。
我很困惑創建一個計時器任務,可以刷新此作業的用戶界面。如果某些圖像可見或不可見,我希望能夠不斷檢查用戶界面。我已經從我自己的研究中做了一個開始,但是如果這個實現,遊戲在加載時會崩潰。
定時刷新UI:
private Timer mTimer1;
private TimerTask mTt1;
private Handler mTimerHandler = new Handler();
public void onStart() {
mTimer1 = new Timer();
mTt1 = new TimerTask() {
public void run() {
mTimerHandler.post(new Runnable() {
public void run() {
//TODO
final TextView health = (TextView) findViewById(R.id.Health);
health.setText("Health: " + health2);
//Enemy ImageViews
final ImageView enemy1 = (ImageView) findViewById(R.id.enemy1);
final ImageView enemy2 = (ImageView) findViewById(R.id.enemy2);
final ImageView enemy3 = (ImageView) findViewById(R.id.enemy3);
final ImageView enemy4 = (ImageView) findViewById(R.id.enemy4);
//sets imageViews into array
final ImageView[] enemies = new ImageView[4];
enemies[0] = enemy1;
enemies[1] = enemy2;
enemies[2] = enemy3;
enemies[3] = enemy4;
boolean running = true;
while (running) {
if (enemy1.getVisibility() == View.VISIBLE) {
int damage = 1;
health2 = health2 - damage;
health.setText("Health:" + health2);
} else {
// Either gone or invisible
}
if (enemy2.getVisibility() == View.VISIBLE) {
int damage = 1;
health2 = health2 - damage;
health.setText("Health:" + health2);
} else {
// Either gone or invisible
}
if (enemy3.getVisibility() == View.VISIBLE) {
int damage = 1;
health2 = health2 - damage;
health.setText("Health:" + health2);
} else {
// Either gone or invisible
}
if (enemy4.getVisibility() == View.VISIBLE) {
int damage = 1;
health2 = health2 - damage;
health.setText("Health:" + health2);
} else {
// Either gone or invisible
}
}
}
});
}
};
mTimer1.schedule(mTt1, 1, 5000);
}
}
這是我創建的計時器任務。我想澄清一下爲什麼這會讓我的遊戲崩潰,以及如何解決這個問題。我從來沒有用這種方式使用過計時器,所以如果問題很明顯,那就是爲什麼我沒有注意到它。
我在onCreate方法裏面有更多的代碼,如果需要的話可以發佈。感謝您爲這個起居者提供的所有幫助和建議。
崩潰:
發佈崩潰日誌 –