Spielzüge animiert darstellen geht nicht

screaper

Mitglied
Hallo Forum,
nächstes Problem:

Es geht um ein Spiel (das hier im Forum langsam, bekannt sein dürfte :-)) , bei dem mit der Mouse eine Kugel gezeichent wird. Diese Position wird in dein Array eingelesen. Das Array wird zu bestimmten Zeitpunkten mehrmals hintereinander verändert, sodass die felder unterschiedlice Zwischenwerte haben, bis sie letzlich ihre Endposition erreicht haben. Ich will aber die Zwischenschritte sichtbnar machen.

Aufrufreihenfolge:

MouseClick -> Berechnung eins Arrays -> udate des Spielbretts - > überprüfen ob nochBerechung und verschiebung innerhlab des Arrays folgen muss -> Wenn ja, dann soll zwischen jedem neuen Berechnungsschritt und dem DisplayUpdate eine kleine Pause sein, sodass jede einzelne Position des Spielssteins sichtbar ist, wohin der gerückt wird und nciht nur die Endposition.

Ich hab versucht einen Sleep einzufügen, allerdings wirkt der immer nur am schluss!?

Hier die Spiellogik, die Prüft, ob noch berechnungen erfolgen müssen:

PHP:
	private boolean allFieldsCheckedMode1(){
		boolean check = false;
		for (int i=0; i<xSize;i++){
			for(int j=0; j<ySize;j++){
				if (isFull(i,j)){
					try{
						Thread.sleep(500);
					}catch(Exception ex){}
					calculateNewPositionsWithMode1(i,j);
					updateDisplay();
				}
			}
		}check = true;
		return check;
				
		}



Ach ja:

In der calculateNewPositionsWithMode1(i,j) wird am Schluss natürlich diese allFieldsCheckedMode1() aufgerufen.



Bitte helft mir mal auf die Sprünge!
Danke!
Gruß Screaper
 
Zuletzt bearbeitet:
Hey,

ich kenne dein Spiel noch nicht :P

Wann tritt folgende Bedingung ein?
PHP:
isFull(i,j)

erst nachdem diese Bedingung erfüllt ist, wird der sleep ja durchgeführt.

bo
 
isFull () überprüft, ob ein Feld voll besetzt ist und daher neu gerechnet werden muss.
x,y entsprechen den Koordinaten des Spielfledes und natürlich des Arrays.

Auf bestimmten Feldern dürfen nur eine gewissen Anzahl von Steinen sein. Das wird hier geprüft. Ist das Feld voll wird neu gerechnet mit calculateNewPositionsWithMode1(x,y); Und die zwischen schritte zwischen den Berechnungen sollen sichtbar sein.

Was meine Methode macht ist, sie wartet die im Thread eingestellt Zeit und zeichnet dann wieder nur das Endergebnis. Irgendwo zwischen rein muss das Ding....
 
jo. Das geht perfekt.

Über die Logik brauchen wir ncht sprechen, die funktioniert perfekt.
Ich verwende die Methode bereits erforlgreich.
ICh glaube du hast die Probelmatik noch nicht ganz erfasst.
Es geht nicht um die Funktion, im Sinne der Logik, sondern ehr um den Ablauf.

Und zwar muss ich eben irgendwo einen Sleep rein bauen. Also Berechnungsdurchlauf 1. updateDisplay. Überprüfen, ob noch ein Feld voll ist. Wenn ja Sleep und dann weiter mit updateDisplay .

ICh denke jetz tist es besser erklärt...!?

Gruß Screaper
 
Zurück