2017-05-24 5 views
0
def pong_collision(paddles, pong, size): 
    ''' paddles and pong out of bounds collison ''' 

    for paddle in paddles: 
     ends = [0, size[0] - paddle.rect.width] 

     # pong|paddle collision 
     if paddle.rect.colliderect(pong.rect): 
      pong.vel.x = -pong.vel.x 
      pong.music.sound.play(loops=0, maxtime=0, fade_ms=0) 


     if (ends[1] <= pong.rect.x or pong.rect.x <= ends[0]): 
     # pong out of bounds collision 

      if pong.rect.x <= ends[0]: 
       # add point to right paddle if pong is < 0 
       if paddle.side == 'right': 
        paddle.text.value += 1 

      if pong.rect.x >= ends[1]: 
       # add poitn to left paddle if pong is > screen size 
       if paddle.side == 'left': 
        paddle.text.value += 1 


      # freezes ball until user starts game 
      pong.state = False 

      # resets pong position to initial 
      pong.rect.topleft = [ 
       (size[0]-pong.rect.width)/2, 
       (size[1]-pong.rect.height)/2 
      ] 

So habe ich diese Pong-Kollisionserkennung oben, die erkennt, wenn der Ping-Pong-Ball die Grenze des Bildschirms erreicht. Was passieren soll ist, dass der Spieler als Punktestand den Punkt bekommt. Dann wird der Ball angehalten und auf die Mitte des Bildschirms zurückgesetzt. Alles funktioniert gut bis auf eine Sache, wenn der rechte Spieler einen Punkt erzielt, wird der Punkt nicht hinzugefügt.Hinzufügen von Punkten zum Spieler, wenn Pong Bildschirm grenzt

Ich bin verwirrt, warum das passiert, klar ist die Kollisionserkennung für beide Paddel gleich, also warum funktioniert man nicht?

Antwort

1

Da Sie die for paddle in paddles: haben, wenn der Ball außerhalb der Grenzen geht, wird er zurückgesetzt, bevor er durch beide Paddles iteriert hat, meine Vermutung wäre, dass das linke Paddel das erste im Paddelsatz ist.

Eine Methode, um dies zu beheben, wäre es, durch die Paddel zu iterieren, wenn Sie festgestellt haben, dass der Ball außerhalb der Grenzen ist, um sicherzustellen, dass beide Paddles ausgewertet werden.

+0

Sie hatten Recht, das war das Problem, es ist schade, jetzt muss ich zusätzlichen Code hinzufügen, um es zu beheben. –

+0

Wenn es nur die zusätzliche Schleife ist, sollte der Code 1 zusätzliche Zeile, 2 Operationen insgesamt (beide der if-Anweisungen) sein, die auf 1 reduziert werden könnte, wenn ein Elif verwendet wird. – njoosse

Verwandte Themen