Hallo,
ich habe Probleme bei der Erstellung eines Pong-Spiels bzw. das Spiel funktioniert eigentlich - allerdings nur solange es bei einer Geschwindigkeit bleibt. Allerdings habe ich vor das der Ball über die Zeit immer schneller wird und auch ungewohnte Bewegung durchführt - aber meine "Kollisionserkennung" die ich zusammengeflickt habe kommt damit nur schwer klar. Manchmal schlägt es den Ball zurück und manchmal nicht - ich muss dazu sagen das ich sehr schlecht in Mathe bin (Hatte gute Noten zur Schulzeit, aber nie das Gefühl etwas gut zu verstehen).
Die wichtigsten Variabeln erklärt:
Playerx: Position der X-Kooridnate vom Spielerschläger
Playery: Position der Y-Kooridnate vom Spielerschläger
SchlägerhöheS: So groß ist der Schläger des Spielers
Geschwindigkeitsveränderung: Die Höhe der Geschwindigkeitszunahme
Abweichungy: Veränderung in Y-Richtung (des Balles), der Wert wird durch eine Formel errechnet und dann durch 100 geteilt
Sieg: Führt die Siegesklasse aus, es gibt 2 Aktionsmöglichkeiten
Richtung: 0 und 1 (links und rechts)
Das Spielfeld ist ein doublebuffered Panel - das Spielfeld lässt sich frei vergrößern und ist nicht fix, fast alle Variabeln passen sich dann an. Schläger und Ball werden im Paint Event gezeichnet - wodurch ich dachte das es logisch ist in Intervallen Überschneidungen zu überprüfen:
(Mir ist bewusst das Csng, etc. nicht optimal ist)
Habe ich einen Logikfehler oder ist es normal das ab einer gewissen Geschwindigkeit der Timer nicht mehr hinterherkommt? Habe die Abfrage komplett selbst geschrieben und nicht einfach abkopiert, daher finde ich auch keine Lösung zu diesem Problem - ich habe nur andere Abfragen gesehen die beispielhaft zeigen wie Kreise und Kreise kollidieren.
Über Ratschläge oder Hinweise wäre ich sehr erfreut.
Edit:
Der Ball wird relativ simpel bewegt:
ich habe Probleme bei der Erstellung eines Pong-Spiels bzw. das Spiel funktioniert eigentlich - allerdings nur solange es bei einer Geschwindigkeit bleibt. Allerdings habe ich vor das der Ball über die Zeit immer schneller wird und auch ungewohnte Bewegung durchführt - aber meine "Kollisionserkennung" die ich zusammengeflickt habe kommt damit nur schwer klar. Manchmal schlägt es den Ball zurück und manchmal nicht - ich muss dazu sagen das ich sehr schlecht in Mathe bin (Hatte gute Noten zur Schulzeit, aber nie das Gefühl etwas gut zu verstehen).
Die wichtigsten Variabeln erklärt:
Playerx: Position der X-Kooridnate vom Spielerschläger
Playery: Position der Y-Kooridnate vom Spielerschläger
SchlägerhöheS: So groß ist der Schläger des Spielers
Geschwindigkeitsveränderung: Die Höhe der Geschwindigkeitszunahme
Abweichungy: Veränderung in Y-Richtung (des Balles), der Wert wird durch eine Formel errechnet und dann durch 100 geteilt
Sieg: Führt die Siegesklasse aus, es gibt 2 Aktionsmöglichkeiten
Richtung: 0 und 1 (links und rechts)
Das Spielfeld ist ein doublebuffered Panel - das Spielfeld lässt sich frei vergrößern und ist nicht fix, fast alle Variabeln passen sich dann an. Schläger und Ball werden im Paint Event gezeichnet - wodurch ich dachte das es logisch ist in Intervallen Überschneidungen zu überprüfen:
(Mir ist bewusst das Csng, etc. nicht optimal ist)
VB.NET-Quellcode
- 'Kollision mit Spieler
- If ballx <= (Playerx + (Ballgröße + 1)) And Bally >= (Playery - (Ballgröße + 1)) And Bally <= (Playery + (SchlägerhöheS - 1)) Then 'untere Seite!
- Speed += Geschwindigkeitsveränderung
- Richtung = 0
- 'Aber der oberen Hälfte geht der Ball (Y) nach oben, ansonsten nach unten
- If Bally >= Playery + (SchlägerhöheS / 2) Then RichtungY = 0 : YKurve += CSng((Abweichungy / 100)) Else RichtungY = 1 : YKurve += CSng((Abweichungy / 100))
- 'Sicherheitsabfrage
- If ballx < (Spielfeld.Location.X - Ballgröße) Then
- Speed = Grundspeed
- Niederlage(0)
- Exit Sub
- End If
- 'Kollisionsabfrage Computer + Ball
- ElseIf ballx >= (Computerx - (Ballgröße + 1)) And Bally >= (Computery - (Ballgröße + 1)) And Bally <= (Computery + ((SchlägerhöheC - 1))) Then
- Speed += Geschwindigkeitsveränderung
- Richtung = 1
- 'Aber der oberen Hälfte geht der Ball (Y) nach oben, ansonsten nach unten
- If Bally <= Computery + (SchlägerhöheC / 2) Then RichtungY = 1 : YKurve += CSng((Abweichungy / 100)) Else RichtungY = 0 : YKurve += CSng((Abweichungy / 100))
- 'Sicherheitsabfrage
- If (ballx + Speed) > (Spielfeld.Width + 0) Then
- Speed = -Grundspeed
- Sieg(0)
- Exit Sub
- End If
- 'Sollte der Ball über den "Rand" gehen wird geschaut welcher Rand es ist und abhängig davon wird Sieg oder Niederlage aufgerufen
- ElseIf ballx <= (Spielfeld.Location.X - (Ballgröße)) Then
- Speed = Grundspeed
- Richtung = 0
- Niederlage(0)
- Exit Sub
- ElseIf ballx >= (Spielfeld.Width + (Ballgröße)) Then
- Speed = -Grundspeed
- Richtung = 1
- Sieg(0)
- Exit Sub
- End If
Habe ich einen Logikfehler oder ist es normal das ab einer gewissen Geschwindigkeit der Timer nicht mehr hinterherkommt? Habe die Abfrage komplett selbst geschrieben und nicht einfach abkopiert, daher finde ich auch keine Lösung zu diesem Problem - ich habe nur andere Abfragen gesehen die beispielhaft zeigen wie Kreise und Kreise kollidieren.
Über Ratschläge oder Hinweise wäre ich sehr erfreut.
Edit:
Der Ball wird relativ simpel bewegt:
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Sneeze“ ()