Pong Problem
Übersicht

MoriBetreff: Pong Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Blitz Basic Forum,
ich bin ein Einsteiger und gerade dabei ein Pong zu schreiben. Eigentlich dachte ich es sei nicht weiter schwierig zumindest weiß ich was Cosinus und Sinus können. Aber irgendwie habe ich einen Denkfehler und weiß nicht genau was ich falsch mache, da ich mir auch nicht genau Visualisieren kann, was mein Problem ist. Ich habe mir auch dieses Video angeguckt http://www.youtube.com/watch?v=qdpxanCY04M, aber das hat leider auch nicht den Nebel in meinem Kopf gelichtet. BlitzBasic: [AUSKLAPPEN] timer = CreateTimer (60) P.S.: Ich hatte als erstes für den Ball anstatt Rect, Oval drinne, deswegen heißen die Variablen noch ball_x/ball_y LG Mori |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wo liegt nun dein Problem? | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, wenn Du dein Problem nicht beschreiben kannst, müssen wir halt raten, versuchs doch nochmal! Das einzige was ich als problematisch ansehe, ist, dass der Ball in eine Zufallsrichtung fliegt, wenn er von irgendwas abprallt.
Btw, dein Code-Stil ist ganz Exzellent für einen Einsteiger, damit wirst Du einmal zu einem mächtigen Jedi werden ![]() |
||
Starfare: Worklog, Website (download) |
Mori |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also das genaue Problem ist, dass der "Ball" nach öfterem starten des Spiels, einfach manchmal im Schläger hängen bleibt, darin rum "zappelt" und dann weiter fliegt genauso ist es mit der Kollision, an der Wand. Ich schätze mal das es ein Berechnungsfehler ist, dass meinte ich auch mit Visualisieren, sorry muss mich da wohl das nächste mal etwas besser ausdrücken: Ich verstehe nicht warum der Ball so handelt wie er es tut und nicht so wie ich es bei einem normalen Pong erwarten würde, vor allem im Bezug auf dieses "Zappeln".
LG Mori |
||
- Zuletzt bearbeitet von Mori am So, Jan 29, 2012 23:15, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem mit RectsOverlap ist, dass es so lange True zurück gibt, wie Schläger und Ball überlappen. Oder anders ausgedrückt: Der Ball bewegt sich so langsam, dass er bei der nächsten Prüfung immer noch in dem Bereich ist, der eine Änderung bewirkt. Ich würde die Kollision für eine gewisse Zeit abstellen, bis der Ball mit Sicherheit wieder auf dem Feld gelandet ist. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Mori |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich habe probiert zu machen was Xeres gesagt hat: BlitzBasic: [AUSKLAPPEN]
Mein Ansatz: sobald die Kugel eine Kollision mit dem Schläger hat wird die Kollision = False und wird erst dann wieder True, wenn du Kugel eine von den Seitenwänden berührt hat, soweit zur Theorie. In der Praxis aber bleibt das Problem bestehen, was mache ich falsch? LG Mori |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
mein tipp: führe bei einer Kollision gleich noch eine erste Bewegung in die neue Richtung aus! Also warte nicht, bis die reguläre Bewegungsaddition erfolgt. Dann ist dein Ball beim nächsten Mal schon garantiert weg vom Schläger! Bei dieser Berechnung könntest Du auch den y-Wert des Ball aus SchlägerY-10 faken!
So ein Fehler tritt immer dann auf, wenn der Ball unmittelbar vor der Kollision schon supernahm am Schläger war und durch die nächste Bewegungsaddition eigentlich schon weit hinter (unter) dem Schläger zu liegen kommt. Da du bei der Kollision mit dem Schläger per Zufall einen neuen Winkel auswähslt, kann es nun sein, dass der x-Anteil der Bewegung nicht ausreicht um bei der nächsten Bewegung den Ball wirklich aus dem Kollisionsbereich zu befördern. D.h. manchmal reicht die nächste Addition nicht aus, um ihn aus dem Kollisionsbereich herauszubringen. Folge: erneute Kollision und Richtungsumkehr. Nun liegt er wieder zu weit hinter dem Schläger...u.w.s. Daher das Zittern. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
- Zuletzt bearbeitet von Midimaster am Mo, Jan 30, 2012 13:52, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist schon mal keine gute Lösung, weil du dir nicht sicher sein kannst, dass der Ball eine Seite berührt.
Mit Millisecs ![]() BlitzBasic: [AUSKLAPPEN] ;Kollisionsüberpruefung Edit: Vielleicht noch simpler: du bewegst den Ball so lange in die neuen Richtung, bis er nicht mehr Kollidiert: BlitzBasic: [AUSKLAPPEN] ;Kollisionsüberpruefung |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Mori |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Danke erstmal für die Lösungsvorschläge, habe es jetzt geschafft. Komischerweise war die Lösung des Problems einfach BlitzBasic: [AUSKLAPPEN] winkel=180-winkel ;Winkel neu berechnen in BlitzBasic: [AUSKLAPPEN] winkel=360-winkel ;Winkel neu berechnen zu ändern danach klappte plötzlich alles. LG Mori |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tu dir aber selbst einen gefallen und bau eine "mit dem grade kollidierten schläger nicht noch einmal kollidieren" verzögerung ein.
Xeres vorschlag ist Millisekunden basiert, meiner wäre distanz basiert (wenn mindestens eine ballgröße unterschied zwischen ball und grade kollidiertem schläger ist, kollision mit schläger wieder erlauben) Midimasters vorschlag ist auch akzeptabel - erstmal vom schläger wegbewegen. Naja grundlegend: Wenn es in 1000 versuchen klappt, kann es im 1001sten versuch immernoch eine änderung zu den vorherigen versuchen haben, wodurch du wieder deinen Bug erhälst. Oder wenn du vielleicht die features ausbaust - dh einsammelbare powerups, welche weitere bälle erzeugen (und diese auch in der luft kollidieren können) ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group