Pong Ausfallswinkel

Maschine

Mitglied
Hey, ich bin grad dabei Pong zu programmieren und finde keine gute Idee, wie ich den Ball "anschneiden" kann, wenn der Ball mit einem Paddel kollidiert.
Im moment hab ich einfach Einfallswinkel = Ausfallswinkel.
Das ist aber ziehmlich langweilig, desshalb will ich je nach Geschwindigkeit des Paddels beim Aufprall des Balles, die Geschwindigkeit des Balles und den Ausfallswinkel verändern.

Ich hoffe mir kann einer einen Tipp geben, wie es zu lösen wäre :)
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
du kannst doch den Punkt des Auftreffens bestimmen und je nach Position zwischen Mitte und ganz außen einen oder mehrere Faktoren/ Prozentwerte in bestimmten Bereichen errechnen,
diese/n Faktor/en benutzt du dann um den berechneten Einfallswinkel + die Geschwindigkeit zu ändern,
wie stark, dass zeigen nur Erfahrungswerte
 

Maschine

Mitglied
Ich habe das schon probiert. Hab es mir so gedacht, trifft der Ball in die Mitte vom Paddel ist faktor 1, also bleibt EW = AW. Ganz oben ist der faktor 0 und unten faktor 2. Aber irgendwie sieht es sehr unschön aus und wenn der Winkel einmal 0° ist, bleibt er das auch...

Hier mal die Methode:
Java:
	private void kollisionMitSchlaeger(PaddelSuper paddel, int index){
//		index 0 ist der linke Paddel
		double paddleMitteY = paddel.gibHoehe() / 2;
		double ballMitteY = y + (hoehe /2) - paddel.gibY();
		double faktor = ballMitteY / paddleMitteY;

		if(index == 0){
			if(y + hoehe >= paddel.gibY() && y <= paddel.gibY() + paddel.gibHoehe() && x <= paddel.gibRandX()){
				winkel = (90 + (90 - winkel)) * faktor;
			}
		}
//		index 1 ist der rechte Paddel
		else if(index == 1){
			if(y + hoehe >= paddel.gibY() && y <= paddel.gibY() + paddel.gibHoehe() && x + breite >= paddel.gibRandX()){
				winkel = (90 + (90 - winkel)) * faktor;
			}
		}
	}
 
S

SlaterB

Gast
wie gesagt: das ist eine Grundtechnik, welche Werte sich danach wie verändern ist komplett variabel,
faktor 0-2 ist eher verrückt, wenn dann 0.5-2, maximal Verdopplung oder Halbierung,
schaue dir ein vorhandenes Pong-Programm an, schaue wie weit sich ein Winkel maximal verändert,

es muss nichtmal ein linearer Verlauf sein, sondern z.B. quadratisch,
nach außen hin umso stärkere Abweichung oder auch andersrum eher schwächer, Abweichung schon hoch genug,
es kann auch mit von der Geschwindkeit abhängen und andersrum,
außerdem können sehr flache Einfallswinkel anders behandelt werden, so dass diese in einem viel größeren Bereich wieder zu normlen Werten abgelenkt werden

ich persönlich kann da überhaupt nichts konkretes nennen, aber ne Suchmaschine bedienen, wenn dir das zu schwer ist ;)
hier
Java Pong Game
gibts sogar Quellcode, auch wenn ich auf die Schnelle keine entsprechende Stelle gefunden habe, sofern sie überhaupt implementiert ist (Spiel auch nicht ausprobiert)
 
Zuletzt bearbeitet von einem Moderator:

FArt

Top Contributor
Meinst du nur verschiedene Austrittswinkel oder tatsächlich etwas wie anschneiden?

Hm, so ein Pong mit anschneiden kenne ich noch nicht, wäre aber bestimmt lustig: Bestimmt im Moment des Aufpralls die Geschwindigkeit des Paddels, welche in einer beliebigen Form ein wenig variabel sein muss (z.B. eine Art Trägheit oder spezielle Beschleunigungsmöglichkeiten) daraus kann man dann eine kurvige Flugbahn bestimmen. Auch hier muss man sich nur näherungsweise an "echtes" Verhalten annähern, z.B. könnte ich mir vorstellen, dass man eine Formel aus der Physik (flacher Wurf, nur umgekehrt) adaptieren kann.
Das kann man natürlich noch weiterspinnen, z.B. mit Effet am Ball, der den Austrittswinkel wieder beeinflusst usw.... macht sicher laune... zu entwickeln und zu spielen...
 
S

SlaterB

Gast
also ich dachte daran noch nicht, das Paddel zumindest hatte ich fest gesehen ;)
meine die Geschwindigkeit des Balls, welcher ja vielleicht auch als Schwierigkeitsgrad benutzt wird,

generell habe ich da aber eher Breakout im Kopf, nicht Pong

edit:
oh, steht sogar im ersten Post:
'je nach Geschwindigkeit des Paddels beim Aufprall des Balls'
 
Zuletzt bearbeitet von einem Moderator:

muckelzwerg

Bekanntes Mitglied
Naja, solange sich das Paddel nur mit einer einzigen Geschwindigkeit bewegt gibt es ja nur drei Bewegungszustände, mit dem es den Ball trifft. Soo viele Winkel lassen sich daraus nicht unbedingt direkt ableiten. Da fände ich den Spin auch reizvoller.

Bei Breakout gibt es die Abgerundeten Ecken, vielleicht kann man mit denen etwas mehr Risiko und andere Winkel reinbringen.
 

Marco13

Top Contributor
Ja, abgerundete Ecken wären auch das erste, was mir eingefallen wäre. Anschneiden könnte duetlich schwieriger werden, weil man schon um es (nicht "korrekt", sondern nur) plausibel aussehen zu lassen einiges an Physik da reinbringen müßte, mit Drehmoment und Reibung und so...
 

muckelzwerg

Bekanntes Mitglied
Falls es denn überhaupt geht. Als Spieler würde ich die Winkelveränderung vermutlich genau andersrum erwarten, als es einigermaßen physikalisch passt. Zumindest wenn ich an Breakout denke.
Und wenn man nur eine einzige Geschwindigkeit heit, dann gibte es auch nur eine Winkelverzerrung nach links und eine nach rechts.
Ganz egal, welche Formel man verwendet.

Deswegen meinte ich, den Spin zu verwenden. Also den Winkel nicht am Paddle zu ändern, sondern beim nächsten Auftreffen am Spielfeldrand, weil er Topspin oder Backspin gespielt wurde.

"Meine" Breakoutvariante war immer "Arkanoid". Wenn man sich solche Spiele anschaut, gibt es jede Menge coole Sachen, die man außer den Winkeln noch einbauen kann.
Da hatte man den Winkel doch einigermaßen unter Kontrolle, bilde ich mir ein. Aber wenn ich mir jetzt Videos davon anschaue, erkenne ich nicht unbedingt direkt ein eindeutiges Verfahren.
Irgendwo in der Nähe der Ecken gibt es eine Stelle ab der der Ball direkt relfektiert wird. Und weiter außen wir er dann noch "flacher"?
 
Zuletzt bearbeitet:

Maschine

Mitglied
Ich habs jetzt so gelöst:
5 Pixel vor aufprall von dem Ball mit dem Paddel bestimme ich die Y-Koordinate und beim Aufprall nochmal. Das Subtrahier ich dann. Dann bestimm ich den Ausfallwinkel mit tan(deltaY / 5). So ist der Winkel 0°, wenn ich das Paddel nicht bewege und der Winkel ist groß, wenn ich es schnell bewege.

So kann ich jetzt auch die Geschwindigkeit des Balles leichter verändern.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Erste Schritte Mehrere Mauszeiger für Ping Pong Game Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben