Hallo
STARGÅTE hat geschrieben:Es ist nicht die optimale lösund, weil du ein Problem bekommst, wenn der Ball "hoch" fleigen soll und deine Steigung unendlich wird.
Besser ist es mit Vektoren zu arbeiten.
Das heißt, der Ball hat einen Ort (x,y) und eine Geschwindigkeit mit den Komponenten (vx, vy).
Im einfachen PONG kannst du dann bei Horizontalen Wänden einfach vy=-vy machen und
bei vertikalen Wänden einfach vx=-vx machen.
Erst einmal danke für deine schnelle Antwort!
Ja stimmt, das klingt logisch. Allerdings habe ich jetzt folgendes Problem:
Wenn der Ball beispielsweise den oberen Rand berührt, dann kehre ich das Vorzeichen um bzw.
addiere vy.
Doch anscheinend ist die Subtraktion von vy noch immer aktiv, wie kann ich diese denn auflösen?
Das Problem ist dann, dass der Ball an der besagten Stelle "stehen" bleibt.
Hier der Auszug aus der Hauptschleife:
Code: Alles auswählen
Repeat
ExamineKeyboard()
ExamineMouse()
If KeyboardPushed(#PB_Key_Up) And blau.Player\playerY > 0
blau.Player\playerY - blau.Player\vy
EndIf
If KeyboardPushed(#PB_Key_Down) And blau.Player\playerY < 600 -SpriteHeight(#Sprite_Gruen)
blau.Player\playerY + blau.Player\vy
EndIf
;If (ball.Player\playerX < 800)
; ball.Player\playerX + ball.Player\vx
;EndIf
If (ball.Player\playerY < 600)
ball.Player\playerY = ball.Player\playerY - ball.Player\vy
EndIf
If (ball.Player\playerY = 10)
ball.Player\playerY = ball.Player\playerY + ball.Player\vy
EndIf
DisplayTransparentSprite(#Sprite_Blau, blau.Player\playerX, blau.Player\playerY)
DisplayTransparentSprite(#Sprite_Gruen, gruen.Player\playerX, gruen.Player\playerY)
DisplayTransparentSprite(#Sprite_Ball, ball.Player\playerX, ball.Player\playerY)
FlipBuffers()
ClearScreen(RGB(100, 20, 0))
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
Until KeyboardPushed(#PB_Key_Escape)
Genauer gesagt geht es um folgenden Teil:
Code: Alles auswählen
If (ball.Player\playerY < 600)
ball.Player\playerY = ball.Player\playerY - ball.Player\vy
EndIf
If (ball.Player\playerY = 10)
ball.Player\playerY = ball.Player\playerY + ball.Player\vy
EndIf
Ein Spielobjekt hat folgende Struktur:
Code: Alles auswählen
Structure Player
playerX.l ; x-Koordinate
playerY.l ; y-Koordinate
vx.l ; x-Geschwindigkeit
vy.l ; y-Geschwindigkeit
EndStructure
Ich bedanke mich wieder für eure Hilfe!
PS: An meinem "Code-Stil" gibt es sicherlich noch eine Menge zu tun, das weiß ich.
Aber für Kritik bin ich trotzdem offen.