Спрайт Pygame постоянно перерисовывается на экран и не движется - PullRequest
2 голосов
/ 07 августа 2020

Я не вижу, что не так с приведенным ниже кодом. Все, что я хочу сделать, это заставить лягушку перемещаться по экрану, но она просто перерисовывает много-много лягушек на расстоянии одного пикселя друг от друга. Как мне переместить лягушку, а не просто нарисовать ее снова?

import pygame
from pygame.constants import *

pygame.init()

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))


class Frog(pygame.sprite.Sprite):

    def __init__(self):
        super().__init__()
        self.image = pygame.transform.scale(pygame.image.load('frog.png'), (64, 64))
        self.rect = self.image.get_rect()
        self.dx = 1

    def update(self, *args):
        self.rect.x += self.dx


running = True
frog = Frog()
entities = pygame.sprite.Group()
entities.add(frog)
while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
    entities.update()
    entities.draw(screen)

1 Ответ

1 голос
/ 07 августа 2020

Вот как вы это делаете в Pygame: вы просто перерисовываете объекты на каждой итерации, чтобы создать иллюзию того, что они движутся, но вы должны скрыть предыдущие нарисованные объекты, заполнив окно цветом solid, например

screen.fill((255, 255, 255))

Это должно быть в начале вашей игры l oop, чтобы у вас был fre sh холст для рисования ваших объектов на каждой итерации.

while running:
    screen.fill((255,255,255))
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
    entities.update()
    entities.draw(screen)
    pygame.display.update()

Возможно, вам придется использовать pygame.display.update () для обновления всего экрана, а не только ваших объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...