← Все вопросы

Как сделать гравитацию и прыжок в флаппи-бёрд на pygame?

Задан 24 месяца назад1.5к просмотров2 ответа
8

Пишу свой Flappy Bird. Птица рисуется, но не пойму, как сделать так, чтобы она падала сама, а по нажатию пробела подпрыгивала вверх. У меня она либо стоит, либо мгновенно улетает. Как сделать плавную гравитацию?

2 ответа

13
✓ Принятый ответ — помог автору

Секрет в том, что у птицы есть вертикальная скорость, которую гравитация постоянно увеличивает вниз, а прыжок резко задаёт вверх (отрицательное значение).

bird_y = 250
bird_speed = 0
GRAVITY = 0.5
JUMP = -8

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            bird_speed = JUMP        # резкий толчок вверх

    bird_speed += GRAVITY            # гравитация тянет вниз каждый кадр
    bird_y += bird_speed             # двигаем птицу

    screen.fill((100, 180, 255))
    pygame.draw.circle(screen, (255, 220, 0), (120, int(bird_y)), 18)
    pygame.display.flip()
    clock.tick(60)

Каждый кадр гравитация прибавляется к скорости, скорость — к позиции. Поэтому без нажатий птица разгоняется вниз (плавное падение), а пробел мгновенно даёт скорость вверх, и она по дуге взлетает и снова начинает падать. Подбери GRAVITY и JUMP под себя.

5

Прыжок лови именно через KEYDOWN (одно нажатие), а не через key.get_pressed() — иначе при зажатом пробеле птица будет «прилипать» к потолку. Для движения держим get_pressed, для разовых действий типа прыжка/выстрела — KEYDOWN.

Ваш ответ

Войдите, чтобы ответить на вопрос.