Zum Inhalt springen

VB.net Breakout/Breakball


chrixko

Empfohlene Beiträge

Hallo Fachinformatiker :)

Zu meinem Problem ( eigentlich sind es 2 ;) ) :

Ich programmiere zurzeit das Spiel Breakball. ( oder Breakout, wie man es nennen möchte.)

Problem 1 :

Ich komme nicht darauf wie ich abfragen kann ob der Ball ( Rectangle ) die Steine ( Rectangles ) von oben/unten bzw. rechts/links trifft. Ich brauche diese Abfrage, da ich ja festlegen muss wie der Ball reflektiert.

Problem 2 :

Ich kann einen Winkel für die Flugbahn des Balls angeben.

Nur wie kann ich den Winkel, je nachem wo der Ball den Wagen unten trifft, generieren, so dass dieser sich sinnvoll verändert ?

Ich hoffe ihr wisst eine Lösung :)

Schonmal Danke im vorraus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie hast du denn angefangen? Hasst du ein Array in dem das Spielfeld hinterlegt ist, bzw. ist der Ball ein Objekt? Der muss ja denn einen Bewegungsvektor sowie eine Position haben. Bei einer Kollision kannst du doch aus dem Vektor und der Position einen neuen Vektor errechnen.

Zu dem zweiten Problem: Da hilft Pythagoras, das ist ja einfach nur ein Dreicek. Der Einfallswinkel zum Panel unten ist = dem Ausganswinkel, nur in entgegengesetzter Richtung. Wenn du dir eine Vertikale Linie von dem Panel ausgehend denkst, und der Ball kommt z.B. auf einem 18 Grad Winkel links von der Linie auf das Panel musst du in mit 18° rechts wieder zurücksenden. Zudem sollte eine Bewegung des Pedals eine Auswirkung haben, also den Winkel verstärken oder verflachen (je nach Bewegungsrichtung)

Einfach mal aufmalen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schonmal danke für die Antwort ;)

Also für den Ball habe ich eine Steigung ( ich weis nich genau was mit Vektor gemeint ist ) um den Ball zu reflektieren drehe ich entweder die Bewegung auf der X- oder Y-Achse um :

z.B.


For Each b As TBall In Balls


If b.Position.X <= 0 Then

  b.DirectionX = -b.DirectionX

End If


Zum 2. Problem: Was mache ich den, wenn der Ball von Rechts kommt und auf die Linke hälfte des Panels trifft ?

EDIT: Wenns hilft die Steine sind in einem Array hinterlegte Rectangles.

Bearbeitet von chrixko
Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit den beiden Werten kommst du vermutlich nicht so weit wenn du Schrägen hast, zudem ist es nicht präzise genug.

Dein Ball braucht eine radiale Bewegungsrichtung ( 0 bis 360 Grad) aus der du die neue Position berechnest, bei Kollisionen musst du jeweils 180 Grad abziehen.

Beispiel: Der Ball fliegt mit genau 0 Grad nach oben, bei einer Kollision ziehst du von dem Kreismaß 180 Grad ab und hast die neue Bewegungsrichtung, ( 0 - 180 ) = -180, das Vorzeichen fällt weg, neue Richtung ist also 180, was eine geraden Bewegung nach unten entspricht.

Fliegt der Ball von links oben nach rechts unten ( 135° ) ist nach einer Kollision der die neue Richtung ( 135 - 180 ) = -45, also 45 Grad, was rechts oben entspricht.

Das ist erst mal ganz trivial und so funktionieren die meisten Breakout Klone.

Wenn das funktioniert muss man den Winkel durch die Bewegung des Schlägers ändern können, je nachdem ob sich der Schläger nach links oder rechts bewegt muss die Zahl die du abziehst größer oder kleiner werden, das kann man auch noch durch die Geschwindigkeit des Balls und des Schlägers varrrieren, musste ein bisschen mit rumspielen. Das reicht völlig aus für ein normales Breakout.

Wenn du jetzt schräge Flächen hast, kommst du nicht drumrum beim Aufprall mit einem gedachten Dreieck den Aufprallwinkel an der jeweiligen Fläche zu berechnen, von dem Winkel werden dann wieder die berühmten 180 abgezogen.

Bearbeitet von Argbeil
Link zu diesem Kommentar
Auf anderen Seiten teilen

Fliegt der Ball von links oben nach rechts unten ( 135° ) ist nach einer Kollision der die neue Richtung ( 135 - 180 ) = -45, also 45 Grad, was rechts oben entspricht.
Das kommt nicht hin. Die 180°-Regel passt nur, wenn die Fläche, mit der kollidiert wird, genau senkrecht zur aktuellen Bewegungsrichtung steht.

Man muss bei der Kollision des Balls mit einem Stein prüfen, ob der Ball gegen eine senkrechte oder eine waagerechte Kante des Steins gestoßen ist. In Abhängigkeit davon wechselt entweder die X- oder die Y-Komponente der Bewegungsrichtung ihr Vorzeichen.

Man kann noch Sonderfälle für Kollisionen mit den Ecken einbauen, aber es sollte zuerst auch ohne gehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man muss bei der Kollision des Balls mit einem Stein prüfen, ob der Ball gegen eine senkrechte oder eine waagerechte Kante des Steins gestoßen ist. In Abhängigkeit davon wechselt entweder die X- oder die Y-Komponente der Bewegungsrichtung ihr Vorzeichen.

Genau das ist ja mein Problem. Ich weis nicht wie ich das überprüfen soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Genau das ist ja mein Problem. Ich weis nicht wie ich das überprüfen soll.

Nach jeder Richtungsänderung des Balls kannst du ermitteln, mit welcher Kante welches Steins er als nächstes kollidieren wird, indem du den Schnittpunkt deiner Ball-Bewegungsgeraden mit den Steinkanten ermittelst.

Du brauchst dabei immer nur zwei der vier Steinkanten zu prüfen. Wenn der Ball nach rechts und unten fliegt, kann er nur mit der linken oder oberen Kante eines Steins kollidieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also soll ich am besten nach jeder Kollision eine Variable setzen die die Richtung angibt ?

Das machst du doch ohnehin schon, mit DirectionX und (mutmaßlich) DirectionY.

Du kannst aber zu diesem Zeitpunk bereits ausrechnen, wo die nächste Kollision erfolgen wird. D.h. wenn die Steine sich nicht bewegen, und es nur einen Ball gibt. Wenn du nicht vorhersehen kannst, ob ein Stein später noch da ist, wo er jetzt ist, musst du die Kollisionsberechnung in jedem Frame machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...