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