【问题标题】:The collision detection works fine, but the score skyrockets, because multiple collisions occur. (pygame)碰撞检测工作正常,但分数飙升,因为发生了多次碰撞。 (游戏)
【发布时间】:2021-01-02 17:22:41
【问题描述】:

在壁球比赛中(类似于乒乓球,但只有一名球员,球从墙上反弹。)我对球和桨进行了碰撞检测,当它们发生碰撞时得分加 1。我遇到了问题碰撞:当球击中桨的顶部或底部时,它会像这样https://i.imgur.com/w2DrOft.gif。我用 ball.vx = -abs(ball.vx) 修复了它,现在看起来像这样:https://i.imgur.com/6duDp6g.gif。尽管碰撞和弹跳效果很好,但当发生顶部或底部碰撞时,分数会立即提高几个数字。如果您只看到碰撞而忽略分数,那根本不会引起注意,但是同时发生更多碰撞并且分数飙升。

hits = 0 

font = pygame.font.Font('freesansbold.ttf',25)
def Objects(paddle,ball,hits,font,black):
    temp = hits

  if ball.BallRect.colliderect(paddle.PaddleRect):
  
          ball.vx = -abs(ball.vx)
      
          score_text = font.render(f"Score: " + str(hits + 1),True, black)
          temp += 1 
  else: 
          score_text = font.render(f"Score: " + str(hits),True, black)
          window.blit(score_text,(20,20))

   return temp
 
  done = False 
  while not done: 
      hits = Objects(paddle,ball,hits,font,black=
      pygame.display.update() 
    
      clock.tick(120)

如何确定分数?

【问题讨论】:

    标签: python python-3.x pygame collision-detection


    【解决方案1】:

    仅当球向右移动时才增加分数。这意味着只有ball.vx大于0时才会增加分数。你需要在改变球的方向之前这样做(在改变ball.vx之前):

    def Objects(paddle, ball, hits, font, black):
    
        if ball.BallRect.colliderect(paddle.PaddleRect):
      
              if ball.vx > 0:
                  hits += 1
              ball.vx = -abs(ball.vx)
          
        score_text = font.render(f"Score: " + str(hits), True, black)
        window.blit(score_text, (20, 20))
    
        return hits
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多