Pygame не перемещает мой прямоугольник, и я не могу понять, почему?

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

class player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image  = pygame.Surface( (30 , 30))
        self.image.fill (red)
        self.rect = self.image.get_rect ()
        self.rect.y = height /2
        self.rect.x = width-50
        self.speedy = 0


    def update(self):
        self.speedy = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_UP]:
            self.speedy = 8

        if keystate[pygame.K_DOWN]:
            self.speedy = -8
        if self.rect.bottom >= height:
            self.rect.top = 0
        if self.rect.top <= 0:
            self.rect.bottom = height

person ram kador    schedule 30.08.2020    source источник
comment
да, спасибо   -  person ram kador    schedule 02.09.2020
comment
Пожалуйста, прочитайте Что мне делать, когда кто-то ответит на мой вопрос? и подумайте о примите ответ, который показался вам наиболее полезным.   -  person Rabbid76    schedule 02.09.2020


Ответы (1)


Вы должны постоянно менять положение атрибута .rect в методе обновления, быстро:

self.rect.y += self.speedy

Убедитесь, что pygame.sprite.Group.update вызывается в каждом кадре, и измените положение после оценки скорости:

class player(pygame.sprite.Sprite):
    # [...]

    def update(self):
        self.speedy = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_UP]:
            self.speedy = 8
        if keystate[pygame.K_DOWN]:
            self.speedy = -8

        self.rect.y += self.speedy

        if self.rect.bottom >= height:
            self.rect.top = 0
        if self.rect.top <= 0:
            self.rect.bottom = height
person Rabbid76    schedule 30.08.2020