Seite 1 von 1

Fragen zu SpriteCollision()

Verfasst: 26.10.2008 14:33
von Dare Devil
Hallo
Ich bin heut dabei mein erstes Spiel in PB zu programmieren - nur so zur Uebung... Das Spiel wird eine SpringBall-Variante ... ich denke es sollte jeder wissen, was damit gemeint ist :wink:

Jedenfalls hab ich da ein Problem ... Wenn der Ball runterfaellt will ich mit SpriteCollision() ueberpruefen, ob der Ball nun auf der linken seite des Ballfaengers ist, auf der rechten Seite oder genau in der Mitte. Das muss ich wissen um die Richtung das Balles bestimmen zu koennen ... ich hoffe euch ist klar wie ich das meine....

Hier die Main-Loop plus Deklarationen (bisher habe ich die X-Richtung das Balles per Zufall bestimmt, als der Ball und die Box sich beruehrten, ist aber keine Loesung):

Code: Alles auswählen

wandx.l = 100
wandy.l = 280
wandwidth.l = 50
wandheight.l = 10
ballx.l = 100
bally.l = 10
ballg.l = 1
ballgx.l = 0
zufall.l = Random(2)

CreateSprite(1, 5, 5)
CreateSprite(2, wandwidth, wandheight)
Repeat
  ExamineKeyboard()
  ClearScreen(0)
  If StartDrawing(ScreenOutput()) = 0
    MessageRequester("Laufzeit - Fehler", "Konnte Spiel nicht starten. Programm wird beendet.")
    End
  EndIf
  
  Box(wandx, wandy, wandwidth, wandheight, RGB(0, 0, 255))
  Circle(ballx, bally, 5, RGB(255, 0, 0))
  
  StopDrawing()
  
  FlipBuffers()
  
  If KeyboardPushed(#PB_Key_Left) And wandx > 0
    wandx - 5
  ElseIf KeyboardPushed(#PB_Key_Right) And wandx < 250
    wandx + 5
  EndIf
  
  If ballg = 1
    bally + 1
  ElseIf ballg = 0
    bally - 1
  EndIf
  
  If SpriteCollision(1, ballx, bally, 2, wandx, wandy)
    ballg = 0
    ballgx = Random(2)
  ElseIf bally <= 0
    ballg = 1
  EndIf
  
  If ballgx = 1
    ballx + 1
  ElseIf ballgx = 2
    ballx - 1
  EndIf
  
  If ballx >= 300
    ballgx = 2
  ElseIf ballx <= 0
    ballgx = 1
  EndIf
  
  If WindowEvent() = #PB_Event_CloseWindow
    Break
  EndIf
Until KeyboardPushed(#PB_Key_Escape)

Verfasst: 26.10.2008 14:44
von Dare Devil
Problem selbst geloest mit folgendem Code:

Code: Alles auswählen

    If ballx < wandx + (wandwidth / 2)
      ballgx = 2
    ElseIf ballx > wandx + (wandwidth / 2)
      ballgx = 1
    ElseIf ballx = wandx + (wandwidth / 2)
      ballgx = 0
    EndIf
Sollte erst mal mein Gehirn einschalten bevor ich ne Frage stelle :mrgreen: