2016-12-29 123 views
0

我正在做一個簡單的Breakout/Arkanoid遊戲來學習pygame。我遇到了槳和球的矩形不能正確碰撞的問題。我還注意到,如果我在兩塊磚之間拍攝球,即使球精靈視覺上與磚塊重疊,球也不會與磚碰撞。這個片段,如果從球的.update方法,它通過槳和磚的列表。Pygame rect.contains碰撞未檢測到

new_pos = self.__calc_pos() 

    # Check for collision with walls 
    if not self.area.contains(new_pos): 
     self.angle = -self.angle 
     new_pos = self.__calc_pos() 
    else: 
     # Check for collision with paddle 
     if paddle.rect.contains(new_pos): 
      self.angle = -self.angle 
      new_pos = self.__calc_pos() 

     # Check for collision with bricks 
     for brick in bricks: 
      if brick.rect.contains(new_pos): 
       self.angle = -self.angle 
       new_pos = self.__calc_pos() 
       brick.kill() 
       bricks.remove(brick) 

    self.rect = new_pos 

.__calc_pos方法:

def __calc_pos(self): 
    new_x = int(math.cos(math.radians(self.angle))) * self.speed 
    new_y = -int(math.sin(math.radians(self.angle))) * self.speed 
    return self.rect.move(new_x, new_y) 
+0

你的'.contains()'方法是什麼樣的? – ospahiu

+0

'contains'檢查一個rect是否完全位於另一個rect內 - 如果一個對象只部分觸及其他對象,則它不成立。使用'colliderect()' – furas

回答

1

contains()檢查是否一個矩形如果完全內另一矩形 - 如果一個對象僅部分地接觸其它物體它不是真實的。使用colliderect()

包括()
如果測試一個矩形內的另一個
包含(矩形) - > BOOL
返回true時的說法是完全裏面的矩形。

-

colliderect()
測試,如果兩個矩形重疊
colliderect(矩形) - > BOOL
返回true,如果(或者矩形重疊的任何部分除頂部+底部或左側+右側邊緣)。

+0

哈,就是這樣。我誤解了這個方法。謝謝! – brianpmaher