Thread unterbrechen

Status
Nicht offen für weitere Antworten.

sirair

Aktives Mitglied
Hi,
Ich möchte, wenn man auf Taste p drückt der Ball pausiert und bei einem erneuten Tastendruck sie wieder weiterläuft. Ich habe es zwar mit wait() und notify() wie unten versucht, aber es läuft nicht.
Wie ist es denn richtig? Danke.

Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Ballbewegung1 extends Applet implements Runnable, KeyListener
{
// Initialisierung der Variablen
int x_pos = 10; // x - Position des Balles
int y_pos = 100; // y - Position des Balles
int radius = 20; // Radius des Balles
private boolean paused=false;
private Object pauseMonitor=new Object();

public void init()
{
addKeyListener(this);
}

public void keyTyped(KeyEvent e) {
if(e.getKeyChar() == 'p'){
if(paused) {
synchronized (pauseMonitor) {
pauseMonitor.notify();
}
} else {
paused=true;
}
}
}
public void keyReleased(KeyEvent e){}
public void keyPressed(KeyEvent e) {}


public void start ()
{

// Schaffen eines neuen Threads, in dem das Spiel läuft
Thread th = new Thread (this);
// Starten des Threads
th.start ();
}
public void run ()
{
Thread.currentThread().setPriority(Thread.MIN_PRIORITY) ;

while(true) {
x_pos ++;
repaint();
if(paused) {
synchronized (pauseMonitor) {
try {

pauseMonitor.wait();

Thread.sleep (10);

} catch (InterruptedException e) {}
}
paused=false;
}

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}

public void paint (Graphics g)
{
g.setColor (Color.red);

g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
}

}
 
Ist auch richtig, dass es nicht so gut funktioniert! Außerdem möchtest du ja deine Spielschleife gerne beibehalten, oder?

Erstell doch einfach eine while(nochPause) Schleife in der keine Spieloperationen, außer der anzeige vllt, gemacht werden. So wird es am häufigsten gelöst und ist einfach umzusetzen.

MfG
Soulfly
 
nunja mit nem Keylistener eine boolean steuern

p drücken --> nochPause = true;

...

while (nochPause){
//nichtvieltun
}

p drücken --> nochPause = false;

und weiter
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben