pong: ball berrechnen...
Übersicht

![]() |
ChrisAttackBetreff: pong: ball berrechnen... |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich möchte gerne ein pong machen..... ich hatte schonmal eins gemacht, nur ich fin den source net mehr ![]() mein problem: wie kann ich dan ball berrechnen? also die flugbahn.... eingangswinkel = ausgangswinkel???? |
||
B3D
MSVC++ DX9SDK |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man nehme die Suche:
https://www.blitzforum.de/view...light=pong https://www.blitzforum.de/view...light=pong https://www.blitzforum.de/view...light=pong Vielleicht ist etwas dabei. |
||
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
prinzipiell würd ich sagen beim abprallen vom schläger: geschwindigkeit in x-richtung wird negiert und y bleibt gleich.
bzw.: für oben und unten geschwindigkeit in y-richtung wird negiert und x bleibt gleich. mfg stfighter |
||
Denken hilft! |
dubitat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
vor dem selben problem stand ich auch und habe einfach mir überlegt, wie man einen wert vom positiven in den negativen bekommen könnte und dabei ist folgende berechnung rausgekommen:
Code: [AUSKLAPPEN] ball_xspeed = ball_xspeed - ball_xspeed * 2 ich glaube dass mit dem den ball an der wanr abspringen lassen ist klar oder? Code: [AUSKLAPPEN] if ball_x < 0 then ball_x = 0 ball_xspeed = ball_xspeed - ball_xspeed * 2 endif und so musste das für jede wand berechnen... der y speed lässt sich auch umdrehen so! kleines beispiel wenn du nicht verstanden hast wa da berechnet wird: du hast die zahl 37 und von dieser ziehste 2*37 ab also 78! Dann bleibt dir als ergebnis -37 und du hast die gegenzahl gefunden und der ball fliegt in die anderer richtiung... |
||
Erare humanum est - Irren ist Menschlich |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch einfacher gehts mit *(-1)
Code: [AUSKLAPPEN] ball_xspeed = ball_xspeed * -1 |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu berücksichtigen wäre, dass sich der Ball in der Regel zum Rand des Schlägers hin anders verhält. Der Winkel wird größer. Oder kleiner, je nachdem, welchen man heranzieht. | ||
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
und warum nich einfach
ball_xspeed= -ball_xspeed ???? ![]() /edit/ @wunderkind dem könnte man z.b.: so abhilfe schaffen bei schläger: b_xspeed= -b_xspeed und b_yspeed= b_yspeed *0.7 ; bei wand: b_yspeed= -b_yspeed und b_xspeed= b_xspeed *0.9 /edit/ mfg stfighter |
||
Denken hilft! |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wollte ja auch nur eine bessere und nicht die beste Lösung zeigen ![]() Hab ja nur dubitats Rechnung ein wenig optimiert 8) Ich machs nämlich bei meinen Pong-Spielen auch einfach mit der -BallX_Speed Variante ![]() Und stfighter: Bei deiner *0.9 und *0.7 würde der Ball ja immer wie langsamer. Man müsste dann beim verringern der einen Geschwindigkeit die andere erhöhen. Allerdings, damit dann immernoch die selbe Gesamtgeschwindigkeit resultiert, müsste man dann schon auf Trigonometrie zurückgreifen. |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mit dem langsamer werden hast du recht.
(sollte ja auch reibung simulieren) aber sinnvoller wäre sicher ein wert mit *1.1 wenn der ball immer schneller wird wird das spiel auch irgendwann aus ![]() mfg stfighter |
||
Denken hilft! |
![]() |
NoToM |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mann könnte auch den Schläger in mehrere Bilder aufteilen, zB Links Mitte Rechts und je nach dem wo der Ball auftrifft den winkel anders berechnen.
Die Bewegungsrichtung sowie das Tempo des Schlägers sind weitere Faktoren, welche einen Einfluss auf den Ball haben können. Wie das genau in Code aussieht, überlass ich lieber jemand Anderem. Vielleicht sollte man wirklich mal ein gutes und leichtverstädliches Beispiel coden (nicht nur Aufprallwinkel = Abprallwinkel), da diese Frage immer wieder auftaucht. Damit hätte man auch ein gutes Beispiel für Cos und Sin... |
||
tipfehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
NoToM hat Folgendes geschrieben: ... Vielleicht sollte man wirklich mal ein gutes und leichtverstädliches Beispiel coden (nicht nur Aufprallwinkel = Abprallwinkel), da diese Frage immer wieder auftaucht. Damit hätte man auch ein gutes Beispiel für Cos und Sin...
Ich probier mal ob ich was hinbekomme, kann aber nichts versprechen, da ich selbst noch nicht so viel gecodet hab ![]() |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
EDIT:
Man müsste den Abstand vom Ball zur Schlägermitte in % vom maximal möglichen Abstand ermitteln. Wird der Schlaeger im oberen Virtel getroffen, dann entspricht das 75%. Nehmen wir an, der Winkel zum Schlaeger betraegt 90 Grad. Jetzt müsste man die Gesamtgeschwindigkeit errechnen und neu verteilen. Und zwar entsprechend des Abstandes zum Mittelpunkt. Das sind dann 25% auf die X-Achse und zu 75% auf die Y-Achse. Dann wuerde der Ball mit gleicher Gesamtgeschwindigkeit im spitzen Winkel vom Schlaeger abprallen. Die X-Achse muss natuerlich noch umgekehrt werden. Das Problem ist aber, dass man die Gesamtgeschwindigkeit ausrechnen muesste. Man hat aber keinen Winkel fuer die Berechnung zur Verfuegung. Der muesste also noch berechnet werden. Vielleicht koennte man das irgendwie mit dem ATAN2-Befehl machen. Allerdings nicht mehr heute Nacht. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
tipfehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So ich hab mich mal hingesetzt und das hier ist rausgekommen, ich weiß,
dass der Code noch (sehr) ausbauffähig ist, aber man muss bedenken, das ich erst 1 oder 2 Dinge Programmiert hab. ![]() Code: [AUSKLAPPEN] Graphics 800,600 X = 300 ;X-Koordinate des Schlägers X2# = 300 ;X-Koordinate des Gegners XMB = 400 ;X-Koordinate des Balls YMB = 300 ;Y-Koordinate des Balls XMB2 = 0 ;X-Bewegung des Balls YMB2 = 1 ;Y-Bewegung des Balls timer = CreateTimer(1) SetBuffer BackBuffer() While Not KeyHit(1) Cls ;Schläger Rect X , 20, 30, 5 ;Spielereingaben If (X =< 750 And X => 20) Then If KeyDown(205) Then X = X + 3 If KeyDown(203) Then X = X - 3 ElseIf X => 750 Then X = 750 ElseIf X =< 20 Then X = 20 EndIf ;Ball zeichnen XMB = XMB + XMB2 YMB = YMB - YMB2 Rect XMB, YMB, 5, 5 ;Kollisionsabfragen ;Bei Kollion mit dem Schläger Y-Richtung verdrehen If YMB = 25 And (XMB >= X - 4 And XMB <= (X + 30)) Then YMB2 = YMB2 * (-1) ;Bei Kollion mit dem Schläger X-Richtung verändern, je nach Aufschlag If YMB = 25 And (XMB >= X - 4 And XMB <= (X + 8)) Then XMB2 = - 1 ElseIf YMB = 25 And (XMB >= X + 8 And XMB <= (X + 14)) Then XMB2 = 0 ElseIf YMB = 25 And (XMB >= X + 14 And XMB <= (X + 30)) Then XMB2 = 1 EndIf ;Kollision Schläger ;Bei Kollion mit dem GegnerY-Richtung verdrehen If YMB = 550 And (XMB >= X2 - 4 And XMB <= (X2 + 30)) Then YMB2 = YMB2 * (-1) ;Bei Kollion mit dem Schläger X-Richtung verändern, je nach Aufschlag If YMB = 550 And (XMB >= X2 - 4 And XMB <= (X2 + 9)) Then XMB2 = - 1 ElseIf YMB = 550 And (XMB >= X2 + 9 And XMB <= (X2 + 13)) Then XMB2 = 0 ElseIf YMB = 550 And (XMB >= X2 + 13 And XMB <= (X2 + 30)) Then XMB2 = 1 EndIf ;Randbereiche überprüfen If (XMB => 780 Or XMB =< 20) Then XMB2 = XMB2 * (-1) If (YMB => 560 Or YMB =< 10) Then : YMB = 300 : XMB2 = 0 : XMB = 400 : WaitTimer(timer) : EndIf ;Gegner Rect X2# , 550, 30, 5 If (X2# - XMB) < -10 Then X2# = X2 + 0.95 ElseIf (X2# - XMB) > -10 X2# = X2 - 0.95 EndIf Flip Wend End Ach ja kann mir vielleicht jemand sagen, wieso hier immer alles so vor sich hinruckelt? Edit: Das ruckeln ist jetzt weg ![]() |
||
- Zuletzt bearbeitet von tipfehler am Di, Aug 24, 2004 14:20, insgesamt einmal bearbeitet
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Setze mal den Befehl SetBuffer BackBuffer() direkt unter dem Graphics-Befehl. Dann sind die Ruckler weg ![]() |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
NoToM |
![]() Antworten mit Zitat ![]() |
---|---|---|
@tipfehler
Hey, schon sehr gut für den Anfang ! Gratuliere |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group