Pygame ждет обновления экрана - PullRequest
       0

Pygame ждет обновления экрана

1 голос
/ 02 февраля 2020

Я только начал с Pygame, и я просто пытаюсь перемещать точки по моему экрану. Проблема в том, что это происходит слишком быстро, и мой экран пигмеев замирает (не отвечает), пока l oop работает, а затем показывает только точки последних итераций точек. Я думаю, что обновление происходит быстро.

Когда я включаю pygame.event.wait(), тогда, когда я даю ввод, l oop прогрессирует, и я могу наблюдать в реальном времени в окне, как точки перемещаются по экрану. Тем не менее, я хотел бы, чтобы они двигались по экрану без ввода данных.

Это мой главный l oop:

def run(self):
    self.food_spread()
    self.spawn_animal()

    for k in range(20000):
        print(k)
        for member in self.zoo: 
            self.move(member)

        self.screen.fill(black)
        for i in range(self.food_locations.shape[0]):
            pygame.draw.rect(self.screen, white, (self.food_locations[i,1], self.food_locations[i,2],1,1))

        for member in self.zoo:
            pygame.draw.circle(self.screen, green,(member.location[0], member.location[1]), 2,1)
            pygame.display.update()
        pygame.event.wait() 

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT: 
                 pygame.quit()
                 sys.exit()

1 Ответ

1 голос
/ 02 февраля 2020

У вас есть приложение l oop, используйте if. Используйте pygame.time.Clock() для управления частотой кадров. Приложение l oop должно

  • контролировать частоту кадров (clock.tick(60))
  • обрабатывать события и перемещать объекты
  • очищать дисплей
  • Нарисуйте сцену
  • Обновите дисплей

Например:

class App:

    def __init__(self):
        # [...]

        self.clock = pygame.time.Clock()

    def run(self):
        self.food_spread()
        self.spawn_animal()

        run = True
        while run:

            # control the framerate
            self.clock.tick(60) # 60 FPS

            # handel the events
            for event in pygame.event.get():
                if event.type == pygame.QUIT: 
                    run = False

            # move the objects
            for member in self.zoo: 
                self.move(member)

            # clear the display
            self.screen.fill(black)

            # draw the scene
            for i in range(self.food_locations.shape[0]):
                pygame.draw.rect(self.screen, white, (self.food_locations[i,1], self.food_locations[i,2],1,1))
            for member in self.zoo:
                pygame.draw.circle(self.screen, green,(member.location[0], member.location[1]), 2,1)

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