AttributeError: объект «pygame.Rect» не имеет атрибутов «вверх» и «вниз» - PullRequest
0 голосов
/ 10 мая 2018

У меня проблема с тем, что я не могу двигать персонажа на экране вверх и вниз.

Когда я запускаю код и нажимаю клавишу «вниз», я получаю эту ошибку:

AttributeError: 'pygame.Rect' object has no attribute 'down'

Когда я запускаю код и нажимаю клавишу вверх, я получаю эту ошибку:

AttributeError: 'pygame.Rect' object has no attribute 'up'

Код:

import pygame

class Character():

    def __init__(self, ai_settings, screen):    
        self.screen = screen
        self.ai_settings = ai_settings   
        self.image = pygame.image.load("character.jpg")
        self.rect = self.image.get_rect()
        self.screen_rect = screen.ge_rect()
        self.rect.centerx = self.screen_rect.centerx
        self.rect.centery = self.screen_rect.centery
        self.center = float(self.rect.centerx)
        self.center1 = float(self.rect.centery)
        self.moving_right = False
        self.moving_left = False
        self.moving_up = False
        self.moving_down = False

    def update(self):
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.center += self.ai_settings.char_speed_factor
        if self.moving_left and self.rect.left > 0:
            self.center -= self.ai_settings.char_speed_factor
        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
        self.rect.centerx = self.center
        self.rect.centery = self.center1

    def blitme(self):
        self.screen.blit(self.image, self.rect)

Это просто файл Python класса символов, а не основной файл. Существует файл игровых функций, который проверяет ввод с клавиатуры, а затем устанавливает для переменных self.moving значение True. Определения в файле gamefunctions затем вызываются в главном файле. Я очень смущен тем, почему это происходит, потому что у меня нет проблем с тем, чтобы персонаж двигался влево и вправо.

1 Ответ

0 голосов
/ 10 мая 2018

Ваша проблема заключается в тех четырех строках кода, где вы проверяете движение и соответствующее столкновение границ:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...