Ping Pong aus Tutorial, Hilfe!
Übersicht

don_boBetreff: Ping Pong aus Tutorial, Hilfe! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute
ich habe mich bisher gut durch das Blitzbasic Community Tutorial gearbeitet. Nun stehe ich bei dem Pong Spiel aber vor einem Problem. Es will und will einfach nicht korrekt funktionieren. Hab auch schoneiniges durchprobiert. Zur Anmerkung ich hab zum Teil eigene Elemente mit verbaut und mein Spiel ist auch horizontal aufgebaut. BlitzBasic: [AUSKLAPPEN]
Das Spiel startet zwar jetzt und der Ball "fliegt" los, "prallt" aber von der Seitenwand nicht ab. Ich glaub ich habe irgendwo einen Denkfehler drin. mfg |
||
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gewöhne dir bitte an deinen Code einzurücken, so wie er aktuell ist, hat keiner Lust den zu lesen. | ||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
setz doch ein paar DEBUGLOGs in den code und beobachte, wie sich Winkel und X-Speed und Y-Speed verhalten:
BlitzBasic: [AUSKLAPPEN] .... Kommt es dann zu irgendwelchen Auffälligkeiten? Vielleicht liegt es daran, dass die Berechnungen keine FLOAT sind? |
||
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, was mir außerdem auffällt:
In der Funktion resetkugel hantierst du mit den Variablen x_ball, y_ball, xmax und ymax. Die hast du in deinem Programm aber gar nicht als global definiert. In diesem Fall kann die Funktion gar nicht auf die Werte zugreifen, sondern weißt ihnen automatisch den Wert 0 zu. |
||
don_bo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mit den float zahlen hab ich auch schon alles mögliche ausprobiert. Sitz den ganzen Mittag schon dran und such den Fehler. ABer ich will ihn einfach nicht finden.
Danke für den Tipp mit den Variablen, stimmt da hätte ich auch drauf kommen können. aber das wird wohl nicht das Problem beheben. ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
was kommt denn nun raus bei den DEBUGLOGs, in dem Moment, wo die Kugel den Rand berührt?
und noch ne nachfrage! Mit Seitenwand meinst Du die Wände oben und unten, oder? |
||
don_bo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Midimaster hat Folgendes geschrieben: was kommt denn nun raus bei den DEBUGLOGs, in dem Moment, wo die Kugel den Rand berührt?
und noch ne nachfrage! Mit Seitenwand meinst Du die Wände oben und unten, oder? also zur fragen mit den Wänden. Ja damit meitne ich die Seitenwände oben und unten. Habe das Spiel ja horizontal aufgebaut. Ich habe geradfe festgestellt, sobald die Kugel auf einen "Schläger auftritt" bleibt sie hängen und die Punkteanzeige rasst nach oben... Zur ersten Fragen, wie genau, schaue ich das nach was bei den DEBUGLOGs raus kommt? Vielleicht ne blöde Frage, aber da stehe ich auf dem Schlauch |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Leider hab ich kein BB, aber unter B3D gibt es da einen Menüpunkt "Debug Enabled?". Wenn du den anklickst, öffnet sich bei Spielstart ein zweites Fenster und gibt alle Nachrichten die im Code mit DEBUGLOG eingesetzt wurden aus.
Oft fällt einem dann auf, dass etwas nicht so ist, wie erwartet.... Löse mal erst das Problem mit den Wänden, bevor du das nächste (mit den Schlägern) hier schon thematisierst... Toll wäre auch, wenn du dir einen Auto-Stop einbaust, damit du die LOGs in Ruhe lesen kannst, z.b. in die Hauptschleife: BlitzBasic: [AUSKLAPPEN] If KeyHit(2) ;wenn Taste "1" gedrückt wird Sobald etwas kurioses passiert, drückst du die 1 und dein Programm stoppt. Jetzt kannst du das DEBUG-Fenster auswerten. |
||
don_bo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Midimaster hat Folgendes geschrieben: Leider hab ich kein BB, aber unter B3D gibt es da einen Menüpunkt "Debug Enabled?". Wenn du den anklickst, öffnet sich bei Spielstart ein zweites Fenster und gibt alle Nachrichten die im Code mit DEBUGLOG eingesetzt wurden aus.
Oft fällt einem dann auf, dass etwas nicht so ist, wie erwartet.... Löse mal erst das Problem mit den Wänden, bevor du das nächste (mit den Schlägern) hier schon thematisierst... Toll wäre auch, wenn du dir einen Auto-Stop einbaust, damit du die LOGs in Ruhe lesen kannst, z.b. in die Hauptschleife: BlitzBasic: [AUSKLAPPEN] If KeyHit(2) ;wenn Taste "1" gedrückt wird Sobald etwas kurioses passiert, drückst du die 1 und dein Programm stoppt. Jetzt kannst du das DEBUG-Fenster auswerten. danke für den Tipp hab den Fehler jetzt gefunden. BlitzBasic: [AUSKLAPPEN]
so funktioniert es jetzt... (war ein großer Denkfehler) Jetzt besteht nur noch das Problem, dass die Bälle vom Schläger durchgelassen werden bzw falsch abgelenkt werden. |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
don_bo, bitte zitiere in Zukunft keine ganzen Beiträge mehr, erst recht keine Vorgängerbeiträge, denn das stört nur den Lesefluss - und zwar erheblich. Die Zitieren-Funktion ist dazu da, auf bestimmte Textstellen einzugehen, was bei dir jetzt ja nicht der Fall war.
mfG Holzchopf |
||
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 |
don_bo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe das Programm jetzt noch ein wenig verbessert. Das mit dem Rand klappt jetzt schon wunderbar und auch den Ball zu spielen klappt meistens. Aber es kommt ab und an vor, dass die Kugel im Schläger "hängen bleibt" und dann in eine Richtung geschleudert wird. Kann es gerade nicht beser formulieren.
hier der Codeauszug der Kollision, vllt entdeckt ja jemand den Fehler ![]() BlitzBasic: [AUSKLAPPEN] ;KOLLISIONSABFRAGE mfg |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
auch hier helfen natürlich wieder ein paar DEBUGLOGs.
Sie würden Dir zeigen, was genau im Moment des Auftreffens auf den Schläger passiert. Ich vermute mal, weil mir das selbst schon passiert ist: 1. die Kugel trifft auf den Schläger und unterschreitet die Grenzwerte massiv. 2. die IF Abfrage entdeckt die Berührung und kehrt die Richtung um 3. die Kugel erfährt eine Bewegung in die Gegenrichtung 4. die neue Position reicht aber nicht, um aus dem Grenzwert zu kommen. und jetzt wird fatal: 5. die IF Abfrage entdeckt die "Berührung" und kehrt die Richtung abermals um 6. die Kugel erfährt eine Bewegung in Richtung Schläger 7. die IF Abfrage entdeckt die Berührung und kehrt die Richtung um 8. die Kugel erfährt eine Bewegung in die Gegenrichtung und schon steckst du in einer Endlosschleife, die nur durch Zufall unterbrochen wird, weil es irgendwann doch "reicht" um aus dem Wirkungsbereich zu kommen. Abhilfe wäre a. Kugel wird gleich in der IF-Umkehr um eine erste Einheit herausgestossen b. Schläger prüft in der IF, ob die Kugel sich wirklich auf ihn zubewegt |
||
don_bo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für deine Hilfe!
ich hab jetzt versucht in der If Abfrage zu prüfen ob der Ball sich auf einen Schläger zubewegt oder nicht. Das sinnvollste was mir da in den Sinn kam ist die Variable "winkel" zu überprüfen. der müsste beim linken Schläger ja im Bereich von >90 bis <270 Grad liegen, dass die kugel sich nach links und somit auf den Schläger zu bewegt. Das ganze habe ich dann im Code so gelöst : BlitzBasic: [AUSKLAPPEN]
und bisher muss ich sagen es scheint auch zu funktionieren... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group