2016-09-05 5 views
0

Ich habe ein Programm, wo der Benutzer in einem Raster reist und einen Feind töten muss. Wenn sie dies tun, erscheint eine Nachricht, dass der Benutzer einen Schrei gehört hat.Wie zeichneString() nur einmal

Diese Nachricht soll nur einmal angezeigt werden, wenn der Benutzer seine Waffe abfeuert. Ich habe die Meldung angezeigt, wenn die folgende Methode zutraf:

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; 
} 

ich dann in meiner Farbe eine Linie() -Methode, die besagt, wenn diese Methode wahr ist, dann die Meldung angezeigt werden soll. Dies wird jedoch weiterhin angezeigt, da es keinen Regler gibt, der sagt, dass es nur einmal ausgeführt werden soll, wenn der Benutzer feuert. ich versucht, ein int zu schaffen, um sicherzustellen, läuft nur einmal:

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

    } 
    } 
    once++; 

Mit dieser es nie die Meldung angezeigt wird. Gibt es eine Möglichkeit, die Nachricht nur einmal anzeigen zu lassen, wenn der Benutzer den nächsten Schritt macht und dann wieder verschwindet? Danke.

+0

Haben Sie versucht, einen Boolean zu haben, der die Ausführung signalisiert? – Vale

+1

Ich kann nicht für andere sprechen, aber ich würde gerne einen anständigen [mcve] sehen, bevor ich sage, was los ist. Bitte schauen Sie auf den Link. –

+0

@Vale Yeah Ich versuchte auch die boolesche Signalisierung, das gleiche Ergebnis – AeroFighter76

Antwort

1

Die paint() -Methode wird jedes Mal aufgerufen, wenn ein Rahmen Ihres Spiels auf dem Bildschirm gezeichnet wird. Wenn Sie es "nur einmal" gezeichnet haben, haben Sie es buchstäblich nur einmal gezeichnet, wie in nur einem Frame, da Frames sehr schnell aktualisiert werden, der Text blinkt und dann nie wieder auftaucht. Ich empfehle, die so etwas wie dieses:

long userFired; 

// wenn der Benutzer Feuer -> 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

Danke, das war richtig. – AeroFighter76