2016-12-29 3 views
0

Я делаю простую игру Breakout/Arkanoid, чтобы узнать pygame. Я сталкиваюсь с проблемой, когда прямоугольники весла и мяча не сталкиваются с ним. Я также заметил, что мяч не сталкивается с кирпичами, если я снимаю мяч между двумя кирпичами, даже когда шарик спрайт визуально перекрывает кирпичи. Этот фрагмент, если из метода шарика .update, который проходит в весле и список кирпичей.Pygame rect.contains collision не обнаруживает

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' проверяет, если один прямоугольник, если полностью внутри другого прямоугольника, - и это не так, если один объект частично касается другого объекта. Используйте 'colliderect()' – furas

ответ

1

contains() проверяет если один прямоугольник, если полностью внутри другого прямоугольника - и это не верно, если один объект только частично коснуться другого объекта. Используйте colliderect()

содержит()
тест, если один прямоугольник внутри другого
содержит (Rect) -> Bool
Возвращает TRUE, если аргумент полностью внутри Прямоугольник.

-

colliderect()
тест, если два прямоугольника пересекаются
colliderect (Rect) -> BOOL
возвращает истину, если любую часть либо прямоугольника перекрытия (за исключением верхний + нижний или левый + правый края).

+0

Ха, вот и все. Мое непонимание метода. Благодаря! – brianpmaher

Смежные вопросы