Я хочу, чтобы мой персонаж делал что-то, пока я держу кнопку, а затем go возвращается в нормальное состояние, как только я позволю go кнопки - PullRequest
1 голос
/ 18 марта 2020

Я создаю свою первую игру. Я работаю с Python и PyGame. Пока что все шло отлично, но я столкнулся с проблемой, которую не могу решить:

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

if event.type == pygame.KEYDOWN:

    if event.key == pygame.K_SPACE:

. С этим персонаж делает что-то, когда вы нажимаете пробел, но он делает это только один раз, если вы удерживаете пробел. Я думал, что сделаю это

if event.type == pygame.KEYDOWN:

    while event.key = pygame.K_SPACE

Но когда я запускаю это и нажимаю пробел, программа блокируется, и я получаю «программа не реагирует».

Итак, в последний раз. Я хочу, чтобы мой персонаж что-то делал, когда я держу пробел, и когда я позволяю go, я хочу, чтобы он go вернулся к тому, как это было. Например: мой персонаж ходит по умолчанию. Когда я держу пространство, я хочу, чтобы оно ползало до тех пор, пока я держу пространство. И затем, наконец, я хочу, чтобы он go вернулся к нормальной ходьбе, как только я позволю go пространства.

Возможно ли это?

1 Ответ

0 голосов
/ 18 марта 2020

Установить состояние (spacePressed), если ПРОБЕЛ нажата при получении события KEYDOWN. Сбросьте состояние и измените положение символа, если ПРОБЕЛ отпущен и KEYUP получено. Переместите символ в зависимости от spacePressed в главном приложении l oop например:

spacePressed = False
while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                spacePressed = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_SPACE:
                spacePressed = False
                # reset character
                # [...]

    if spacePressed:
        # move character
        # [...] 

Другой вариант - использовать pygame.key.get_pressed(), чтобы получить нажатие клавиш главное приложение l oop и сброс положения символа, если получено событие KEYUP:

while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_SPACE:
                # reset character
                # [...]

    keys = pygame.key.get_pressed() 
    if keys[pygame.K_SPACE]:
        # move character
        # [...] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...