ключ Python Pygame удерживается - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь заставить самолет продолжать движение влево, когда удерживаешь левую клавишу, я использую pygame.key.get_pressed (), но только один раз, как обычный pygame.KEYDOWN печатать «двигаться вправо» только один раз

Может кто-нибудь помочь, пожалуйста?

def key_control(hero_temp):
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
        print('Game Exit')
        exit()

        key_state = pygame.key.get_pressed()
        if key_state[pygame.K_RIGHT]:
            print('move to right')
            hero_temp.x += 10
        if key_state[pygame.K_LEFT]:
            print('move to left')
            hero_temp.x -= 10
        if key_state[pygame.K_UP]:
            print('move to top')
            hero_temp.y -= 10
        if key_state[pygame.K_DOWN]:
            print('move to right')
            hero_temp.y += 10
        if key_state[pygame.K_SPACE]:
            print('space/shoot')
            hero_temp.fire()

Ответы [ 2 ]

0 голосов
/ 15 мая 2018
def key_control(hero_temp):
    key_state = pygame.key.get_pressed()
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            print('Game Exit')
            exit()

        if key_state[pygame.K_RIGHT]:
            print('move to right')
            hero_temp.x += 10
        if key_state[pygame.K_LEFT]:
            print('move to left')
            hero_temp.x -= 10
        if key_state[pygame.K_UP]:
            print('move to top')
            hero_temp.y -= 10
        if key_state[pygame.K_DOWN]:
            print('move to right')
            hero_temp.y += 10
        if key_state[pygame.K_SPACE]:
            print('space/shoot')
            hero_temp.fire()
0 голосов
/ 05 мая 2018

Вы вызываете только key_state = pygame.key.get_pressed() внутри своего цикла, где вы повторяете каждое событие. Просто возьмите это оттуда, и оно должно работать.

Проблема в том, что он будет проверять наличие нажатых кнопок только в случае появления нового события. Если не было нового события, он не будет проверять нажатые кнопки и код не будет выполнен

def key_control(hero_temp):
    key_state = pygame.key.get_pressed()
    if key_state[pygame.K_RIGHT]:
        print('move to right')
        hero_temp.x += 10
    if key_state[pygame.K_LEFT]:
        print('move to left')
        hero_temp.x -= 10
    if key_state[pygame.K_UP]:
        print('move to top')
        hero_temp.y -= 10
    if key_state[pygame.K_DOWN]:
        print('move to right')
        hero_temp.y += 10
    if key_state[pygame.K_SPACE]:
        print('space/shoot')
        hero_temp.fire()

    for event in pygame.event.get():
        # Only gets run if there are new events
        if event.type == pygame.QUIT:
            print('Game Exit')
            exit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...