属性错误:'pygame.Rect游戏“”object没有属性“up”和“down”

2024-09-30 08:21:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我似乎不能移动屏幕上的角色上下。在

当我运行代码并按下down键时,会出现以下错误:

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

运行代码并按向上键时,出现以下错误:

^{pr2}$

代码:

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文件,而不是主文件。有一个游戏功能文件,它检查键盘输入,然后设置自动移动的变量设置为True。然后在主文件中调用gamefunctions文件中的定义。我很困惑为什么会发生这种情况,因为我可以让角色左右移动。在


Tags: 文件rectimageselfrightfalsesettingsscreen
1条回答
网友
1楼 · 发布于 2024-09-30 08:21:36

您的问题就在代码的这四行中,在这四行中检查移动和相应的边界冲突:

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和{}对象的属性,这实际上并不存在。也许你是说top和{}?在

此外,您的代码逻辑是不正确的。您正在检查self.rect.bottom在向下移动时是否大于零—但是,为了正确地实现边界碰撞机制,您应该检查它在向下移动时是否小于屏幕的高度(我假定它是self.screen_rect.bottom)。与self.rect.top相反,您应该检查它是否大于零。在

更正了if语句:

^{pr2}$

相关问题 更多 >

    热门问题