Je crée un jeu simple clic qui fraie ennemis à l'écran et lorsque l'utilisateur clique dessus, ils obtiennent des points et les ennemis sont détruits. Je fais cela en rendant les imagesbox visibles et invisibles lorsque l'utilisateur clique dessus. Ils fonctionnent sur une minuterie et ont une boucle constante de frai.Android Studio: TimerTask
Actuellement, je veux mettre en œuvre une façon dont l'utilisateur va commencer à perdre de la santé. Donc, je voudrais vérifier si l'imagebox ennemi est visible, si c'est le cas, le joueur perdra lentement la santé.
Je suis confondu avec la création d'une tâche de minuterie qui peut rafraîchir l'interface utilisateur pour ce travail. Je veux être en mesure de vérifier l'interface utilisateur en permanence si certaines images sont visibles ou non. J'ai commencé à partir de mes propres recherches, mais le jeu se bloque lorsqu'il est chargé si cela est mis en œuvre.
minuterie pour rafraîchir l'interface utilisateur:
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);
}
}
C'est la tâche de minuterie j'ai créé. Je voudrais savoir pourquoi cela bloque mon jeu et comment résoudre ce problème. Je n'ai jamais utilisé la minuterie de cette façon auparavant, donc si le problème est évident c'est pourquoi je ne l'ai pas remarqué.
J'ai beaucoup plus de code dans la méthode onCreate et peut envoyer des messages en cas de besoin. Merci pour toute l'aide et les conseils pour ce débutant.
Accident:
Poster le journal crash –