2016-09-05 2 views
0

J'ai un programme où l'utilisateur voyage dans une grille et doit tuer un ennemi. Quand ils le font, un message indique que l'utilisateur a entendu un cri.Comment dessinerString() une seule fois

Ce message n'est supposé être affiché qu'une fois lorsque l'utilisateur tire son arme. J'ai fait l'affichage du message si la méthode suivante était vrai:

public boolean deadWumpus() 
{ 
    for(int x=0;x<10;x++) 
    { 
     for(int y=0;y<10;y++) 
     { 
      if(map.grid[x][y].getDeadWumpus()==true) 
       return true; 
     } 
    } 
    return false; 
} 

J'ai alors une ligne dans ma méthode de peinture() qui stipule que si cette méthode est vrai afficher le message. Cependant, cela continue à afficher car il n'y a pas de régulateur pour lui dire de ne fonctionner qu'une seule fois lorsque l'utilisateur se déclenche. Je tenté de créer un int pour assurer il fonctionne qu'une seule fois:

// at beginning of program 
int once=0; 
//in paint() 
    if(once==0){ 
    if(deadWumpus()==true) 
    { 
     g.drawString("You hear a scream.",300,675); 

    } 
    } 
    once++; 

En utilisant cette affiche jamais le message. Y a-t-il une manière que je peux obtenir le message pour afficher seulement une fois quand l'utilisateur tire et puis disparaissent une fois que l'utilisateur fait leur prochain mouvement? Merci.

+0

Avez-vous essayé d'avoir un booléen signalant l'exécution? – Vale

+1

Je ne peux pas parler pour les autres, mais j'aimerais bien voir [mcve] avant de dire ce qui ne va pas. S'il vous plaît regardez le lien. –

+0

@Vale Ouais j'ai essayé la signalisation booléenne aussi, même résultat – AeroFighter76

Répondre

1

La méthode paint() est appelée à chaque fois qu'une image de votre jeu est dessinée à l'écran. Quand vous le faites dessiner "seulement une fois", vous faites littéralement dessiner "seulement une fois", comme dans, pour une seule image, puisque les images sont mises à jour très rapidement, le texte clignote et ne s'affiche plus jamais. Je recommande d'avoir quelque chose comme ceci:

long userFired; 

// lorsque les feux de l'utilisateur -> userFired = System.currentTimeMillis();

paint() { /*the "2000" means that the text will display for 2 seconds*/ 
    if(System.currentTimeMillis()-userFired < 2000 && deadWumpus()==true) { 
     g.drawString("You hear a scream.",300,675); 
    } 
} 
+0

Merci, c'était correct. – AeroFighter76