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.