Более быстрая версия pygame.event.get () - PullRequest
1 голос
/ 24 сентября 2019

Я делаю клон Asteroidz в Pygame и у меня есть два цикла for event in pygame.event.get(), один для проверки запроса на выход, и должна ли игра начаться нажатием пробела, а затем дальше в игре, чтобы попытаться ограничить игрока отудерживая пробел и непрерывно стреляя.Ниже приведен код для моей функции check_input, которая запускается один раз в каждом цикле;

def check_input(self):
    for event in pygame.event.get(): #NOT CHECKING THIS FAST ENOUGH, WHOLE PROCESS IS TOO SLOW
        if (event.type == pygame.KEYUP) and (event.key == pygame.K_SPACE):
            print ('boop')
            self.shootThrottle = 0

    if self.shootThrottle == 0:
        self.shootThrottle += 1
        bullets.add(Bullet(self.shape[0][0],self.shape[0][1], self.angle))

    key = pygame.key.get_pressed()

    if key[pygame.K_LEFT]:
        self.angle -= 7
        self.rotate(-7)
    elif key[pygame.K_RIGHT]:
        self.angle += 7
        self.rotate(7)

    if self.angle > 360:
        self.angle -= 360
    elif self.angle < 0:
        self.angle += 360

    if key[pygame.K_UP]:
        self.accelerate()
    elif key[pygame.K_DOWN]:
        self.decelerate()

Я использую shootThrottle в качестве средства, чтобы попытаться остановить выстрелы пуль, пока не будет разрешен пробелидти.Эта система работает, но из-за того, что for event in pygame.event.get() слишком медленный, он не работает должным образом.

Любая помощь очень ценится!

1 Ответ

1 голос
/ 24 сентября 2019

[...] и иметь два для события в pygame.event.get() loops [..] "

В этом проблема. pygame.event.get() получает все сообщения и удаляет их из очереди. Таким образом, 1-й или 2-й цикл получает событие, но никогда оба цикла не получают все события. Это приводит к тому, что какое-то событие, кажется, пропущено.

Получите события один раз и используйте их в обоих циклах:

while run:

    events = pygame.event.get()

    # [...]

    # 1st event loop
    for event in events:
        # [...]

    # [...]

    # 2nd event loop
    for event in events:
        # [...]

    # [...]

Обратите внимание, что вы можете передать список events функции e по параметру или даже напрямую получить доступ к переменной events в глобальном пространстве имен.

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