# Pong-Klon. Denkfehler bei kollisionstest



## b0unc3 (23. Apr 2007)

hey hey,

hab da mal son kleines problem.. also ich möchte, dass wenn das "panel" den obigen rang berührt, dass er nicht weiter hoch kann (also die "geschwindigkeit" nach oben auf 0 setzen) und wenn das panel dann wieder weiter unten ist, dass die geschwindigkeit dann wieder auf die vorherige geschwindigkeit gesetzt wird.. nur wenn ich jetzt den obigen oder unteren bilrschirmrand einmel erreicht habe, dann lässt sich das panel weder nach oben noch nach unten bewegen ..

das ganze läuft in einem applet


```
// checks whether the panel reachs the wall
	public void panelReachWall() {
		// checks whether the panel reachs the wall on top
		if (pos.y <= 0) {  // pos.y ist die position des panels
			speed = panelSpeedUp;
			panelSpeedUp = 0;
		} else
		// checks whether the panel hits the wall in south
		if (pos.y >= Pong.APPLETSIZE_Y - height) {
			speed = panelSpeedDown;
			panelSpeedDown = 0;
		} else {
			panelSpeedDown = speed;
		}
		if (pos.y >= 0) {
			panelSpeedUp = speed;
		} else if (pos.y <= Pong.APPLETSIZE_Y - height) {
			panelSpeedDown = speed;
		}
	}
```

wer wäre denn mal so nett und stubbst mich ma mit der nase auf den fehler?   

Mfg. b0unc3


----------



## Apo (24. Apr 2007)

Wahrscheinlich/Vielleicht liegt es daran, dass deine y-Position kleiner als 0 ist ... bzw größer als die Appletgröße - Panelgröße und dadurch du nie in den unteren if Zweig dann kommst.
Ich würde also einfach die Koordinaten auf 0 bzw den anderen Wert setzen ... also folgendermaßen ...

```
// checks whether the panel reachs the wall
   public void panelReachWall() {
      // checks whether the panel reachs the wall on top
      if (pos.y <= 0) {  // pos.y ist die position des panels
         speed = panelSpeedUp;
         panelSpeedUp = 0;
         pos.y = 0;
      } else
      // checks whether the panel hits the wall in south
      if (pos.y >= Pong.APPLETSIZE_Y - height) {
         speed = panelSpeedDown;
         panelSpeedDown = 0;
         pos.y = Pong.APPLETSIZE_Y - height;
      }
      ...
```

Ist aber nur eine Vermutung ... es könnte auch an so vielen anderen Sachen liegen


----------



## para_ (24. Apr 2007)

mal ne andere frage, warum benutzt du speed up und down und nicht einfach für up positive und für down negative werte?


----------



## b0unc3 (24. Apr 2007)

@Apo:

.. danke erstma für deine hilfe, ich werds mal testen

@para

.. um hochzukommen muss ich nen negativen wert nehmen da y nach oben hin kleiner wird bei x halt genau andersrum



und joa Up und Down, damit ich auch noch runter kann, wenn z.B. der speedUp auf 0 gesetzt wurde


//NACHTRAG:

Apo dein vorschlag hat den fehler leider auch nich behoben 

//NACHTRAG 2:

okay habs jez raus.. hab einfach aus den else teilen auch ne if abrrage gemacht:


```
// checks whether the panel reachs the wall
	public void panelReachWall() {
		// checks whether the panel reachs the wall on top
		if (pos.y <= 0) {
			speed = panelSpeedUp;
			panelSpeedUp = 0;
			pos.y = 0;
		}
		// whether the panel dont reachs the wall on top
		if (pos.y >= 0) {
			panelSpeedUp = speed;
		}
		// checks whether the panel reachs the wall in south
		if (pos.y >= Pong.APPLETSIZE_Y - height) {
			speed = panelSpeedDown;
			panelSpeedDown = 0;
			pos.y = Pong.APPLETSIZE_Y-height;
		}
		// checks whether the panel dont reachs the wall in south
		if (pos.y <= Pong.APPLETSIZE_Y - height) {
			panelSpeedDown = speed;
		}
	}
```


----------

