Ваша проблема заключается в тех четырех строках кода, где вы проверяете движение и соответствующее столкновение границ:
class Character():
# Other methods...
def update(self):
# Other if clauses...
if self.moving_up and self.rect.up < self.screen_rect.up:
self.center1 += self.ai_settings.char_speed_factor
if self.moving_down and self.rect.down > 0:
self.center1 -= self.ai_settings.char_speed_factor
# ...
Обратите внимание, что вы сравниваете атрибуты up
и down
Rect
объектов, которых на самом деле не существует.Возможно, вы имели в виду top
и bottom
?
Кроме того, логика вашего кода неверна.Вы проверяете, больше ли self.rect.bottom
, чем ноль, когда он движется вниз - однако, чтобы правильно реализовать механику столкновения с границей, вы должны проверить, не меньше ли это высоты экрана (которую я предположил self.screen_rect.bottom
), когдадвижется вниз.Противоположное относится к self.rect.top
- вы должны проверить, больше ли оно нуля.
Исправлено if
операторов:
# Replaced .up with .top and .down with .bottom
# Corrected .top and .bottom comparison
if self.moving_up and self.rect.top > 0:
self.center1 -= self.ai_settings.char_speed_factor
if self.moving_down and self.rect.bottom < self.screen_rect.bottom:
self.center1 += self.ai_settings.char_speed_factor