2016-12-29 84 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