Как заставить изображение / объект прыгать бесконечно много раз? - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь сделать клона из flappy bird , чтобы выучить пигмент, и я новичок. Просто делаю основы, и я хочу, чтобы изображение перепрыгивало всякий раз, когда пользователь нажимает кнопку пробела, иначе изображение продолжает падать. Проблема, которую я получаю, заключается в том, что если я удерживаю нажатой клавишу пробела, она будет продолжать летать вверх, а не просто прыгать за раз . Как я могу это исправить? (Кто-то объясняет основы c физики, необходимые для подачи заявки на прыжок в летучей птице)

import pygame
pygame.init()

screen = pygame.display.set_mode((500,500))
c = pygame.image.load('cookie.png')

run = True
x,y = 50,50

while run:
    screen.fill((255,255,255))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()

    if keys[pygame.K_SPACE]:
        y -= 1
    else:
        y += 0.2

    screen.blit(c, (x,y))
    pygame.display.update()

pygame.quit()

Ответы [ 2 ]

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

Состояния, которые возвращаются pygame.key.get_pressed(), пока нажата клавиша. KEYDOWN появляется только один раз при нажатии клавиши.
Используйте событие, чтобы поднять птицу. Но положение птицы должно быть вычислено в главном l oop, чтобы птица постоянно падала вниз.
Кроме того, используйте pygame.time.Clock соответственно .tick() c контролировать флопс в секунду:

import pygame
pygame.init()

screen = pygame.display.set_mode((500,500))
clock = pygame.time.Clock()

c = pygame.image.load('cookie.png')
run = True
x,y = 50,50

while run:
    clock.tick(60)

    fly = False
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN:
           fly = event.key == pygame.K_SPACE

    if fly:
        y -= 20
    else:
        y += 1

    screen.fill((255,255,255))
    screen.blit(c, (x,y))
    pygame.display.update()

pygame.quit()
1 голос
/ 19 февраля 2020

Попробуйте использовать событие KEYDOWN вместо get_pressed(). get_pressed() возвращает массив, содержащий состояние каждой клавиши на клавиатуре, и вы вызываете его каждый раз, когда запускается ваша l oop - поэтому, если вы удерживаете клавишу нажатой, она будет срабатывать несколько раз.

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        run = False
    elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
        y -= 1
    else:
        y += 0.2

Что-то в этом роде должно работать для вас.

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