Я создаю простую клик-игру, которая порождает врагов на экране, и когда пользователь нажимает на них, они получают очки, а враги уничтожаются. Я делаю это, делая окна изображений видимыми и невидимыми, когда пользователь нажимает на них. Они работают по таймеру и имеют постоянный цикл нереста.
В настоящее время я хочу реализовать способ, которым пользователь начнет терять здоровье. Поэтому я хотел бы проверить, виден ли блок изображений врага, если он есть, игрок будет медленно терять здоровье.
Меня смущает создание задачи таймера, которая может обновлять пользовательский интерфейс для этой работы. Я хочу иметь возможность постоянно проверять пользовательский интерфейс, видны ли какие-то изображения или нет. Я начал это из своего собственного исследования, но игра вылетает при загрузке, если это реализовано.
Таймер обновления пользовательского интерфейса:
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, и я могу опубликовать его при необходимости. Спасибо за помощь и советы этому новичку.
Крушение: