2016-12-29 20 views
0

私はPygameを学ぶために簡単なBreakout/Arkanoidゲームを作っています。私はパドルとボールの長方形が適切に衝突していない問題にぶつかっています。ボールスプライトとブリックが視覚的に重なっていても、2本のブリックの間でボールを撃つと、ボールがブリックに衝突しないことに気付きました。このスニペットはボールの.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の内側にある場合にチェックします。一方のオブジェクトが他のオブジェクトに部分的にしか接触しない場合はtrueになりません。 'colliderect()'を使用してください。 – furas

答えて

1

contains()チェック1 RECT完全に別の四角形の内側であればなら - と1つの目的は、部分的にのみ他のオブジェクトに触れた場合、それが真ありません。 1つの矩形が別の
内にある場合colliderect()

は(含まれている)
テストを使用してください(のRect)含まれています - 引数が完全にのRect内あるとき真> BOOL
戻ります。

-

colliderect()
試験2つの矩形が
colliderect(のRect)重複する場合 - > BOOL
戻り真矩形重複のいずれかの任意の部分(場合を除いを上+下または左+右の辺)。

+0

ハ、これでした。私の方法の誤解。ありがとう! – brianpmaher

関連する問題