# [Java]Bild bewegen



## $$Money$$ (20. Dezember 2008)

Hallo,

Ich habe ein Problem ich möchte gerne die Variable "police_ypos" laufend um 1 erhöhen und wenn der Wert der Variable 750 beträgt soll er wieder auf 0 gesetzt werden. Danach soll das ganze wieder vorne beginnen. Leider funktioniert das nicht ich habe bereits folgene Beispiele ausprobiert.


```
for(police_ypos=0; police_ypos<750; police_ypos++){
	bildanzeige.repaint();
}	
for(police_ypos=750; police_ypos>749; police_ypos=0){
	bildanzeige.repaint();
}
```


```
while(police_ypos < 750){
police_ypos++;

if(police_ypos > 749){
police_ypos = 0;
}
}
```

Vielen Dank für eure Hilfe,

MfG:

Thomas
}


----------



## Florian Strienz (20. Dezember 2008)

guck dir mal deinen code an. Der zweite war schon fast richtig. Aber deine IF Bedingung wird nie ausgeführt, da deine while Schleife vorher aufhört. Du musst noch ein = einfügen:


```
while(police_ypos < 750){
police_ypos++;
//der Wert wird nie größer als 749, da die while schleife bei 749 aufhört.
if(police_ypos >= 749){
police_ypos = 0;
}
}
```


Gruß
Flo


----------



## $$Money$$ (21. Dezember 2008)

Danke für deine Hilfe, 

dein Beispiel wird ohne reklamationen kompiliert, jedoch wird beim ausführen nichts mehr angezeigt weder meine Bilder noch das Fenster.

Ich hab das gefühl das ist so weil die while schleife gar nicht mehr beendet wird kann das sein

MfG...


----------



## Florian Strienz (21. Dezember 2008)

Klar, die while-Schleife wird nie verlassen.

Du musst das ganze in einem eigenen Thread starten, damit deine Grafik gezeichnet wird. Sonst blockiert die Schleife das Zeichnen.

Ich glaub hier in dem Buch http://www.javabuch.de/ gibt es ein Kapitel zum Thema Animationen. Da wird beschrieben, was du beachten musst.

Gruß
Flo


----------



## $$Money$$ (21. Dezember 2008)

Vielen dank für deinen Tipp, ich habe das Problem folgendermasen gelöst:


```
class bewegen extends Thread{
	public void run(){
		while (police_ypos < 750) {
			police_ypos++;
				if(police_ypos >=749){
					police_ypos = 0;
					police_xpos = (int) (Math.random()*600+100);
				}
			bildanzeige.repaint();
			try {       
				Thread.sleep(10);
			} 
			catch (InterruptedException e) {
				interrupt();     
			}
		}
   }
 }
```


----------



## $$Money$$ (22. Dezember 2008)

Habe schon wieder eine neue Frage.

Folgendes wie kann ich einen Thread z.B. bei einem klick auf einen Button "pausieren" und dann beim klick auf einen Anderern Button den Thread an der gestoppten Stelle fortfahren?

MfG:


----------



## zeja (23. Dezember 2008)

Den Thread kannst du nicht pausieren, aber du kannst dir ein Flag boolean pause machen welches du dann in deinem Thread abfragst und wenn dies auf true steht eben halt das Bild nicht weiter verschiebst.


----------



## $$Money$$ (23. Dezember 2008)

Hmm.. 

Danke für deine Antwort ich kann genau nachvollziehen wie du das machen würdest beim umsetzen ist es aber gescheitert ich kriegs einfach nicht hin.

Kannst du da evt. auch noch helfen?

MfG


----------



## zeja (23. Dezember 2008)

Wie hast dus denn nun versucht? Zeig doch mal den Code.


----------



## $$Money$$ (24. Dezember 2008)

Also ich kann zwar mit folgendem Code mit Hilfe der Boolean Variable "flag" den Thread stoppen (wenn sie auf  "false" steht). Wenn ich die Variable aber wieder auf "true" setzte startet der Thread nicht.


```
class polizei extends Thread{
	public void run(){
		while (flag == true && police_ypos < 480) {
			police_ypos += police_speed;
				if(police_ypos >=480){
					while(true){
						police_ypos = generator.nextInt(350);
						if(police_ypos < 120){
						continue;
						}
						police_ypos = police_ypos/-1;
						break;
					}
					while(true){
						police_xpos = generator.nextInt(693);
						if(police_xpos <210){
							continue;
						}
						break;
					}
					police_speed += 0.3;
				}
			bildanzeige.repaint();
			try {       
				Thread.sleep(10);
			} 
			catch (InterruptedException e) {
				interrupt();     
			}
		}
	}
```

Wie kann ich das ändern

MfG:


----------



## zeja (24. Dezember 2008)

Steht dein flag auf false wird die while-Schleife und damit der Thread beendet. Und beendet heißt wirklich beendet und weg...

Du mußt daher direkt innerhalb der while-Schleife eine if-Abfrage machen:

```
while(police_ypos < 480) {
			if(flag){
				.....
				bildanzeige.repaint();
			}
			try {       
				Thread.sleep(10);
			} 
			catch (InterruptedException e) {
				interrupt();     
			}
		}
```


----------

