Как смоделировать Прыжки в Pygame для этого конкретного кода - PullRequest
0 голосов
/ 08 февраля 2019

Я пытался смоделировать переход в коде Pygame, но не смог успешно его реализовать.Существует прямоугольник размером 10 на 10, и я хочу, чтобы этот прямоугольник прыгал при нажатии SPACE .Сейчас я держу этот код независимым от гравитации.

import pygame
pygame.init()
ScreenLenX = 1000
ScreenLenY = 500
win = pygame.display.set_mode((ScreenLenX, ScreenLenY))
pygame.display.set_caption("aman")
run = True
Xcord = 100
Ycord = 100
length = 10
height = 10
vel = 2
xmove = 1
ymove = 1
while run:
  #pygame.time.delay(1)
    for event in pygame.event.get():
        print(event)
        if event.type ==pygame.QUIT:

            run = False

    if keys[pygame.K_RIGHT] and Xcord <= ScreenLenX-length:
        Xcord += vel
    if keys[pygame.K_LEFT] and Xcord >= 0:
        Xcord -= vel

     if keys[pygame.K_UP] and Ycord >= 0:
            Ycord -= vel
     if keys[pygame.K_DOWN] and Ycord <= ScreenLenY - height:
            Ycord += vel
     win.fill((0, 0, 0))
    pygame.draw.rect(win, (255, 0, 0), (Xcord, Ycord, length, height))
    keys = pygame.key.get_pressed()


    pygame.display.update()
pygame.quit()

1 Ответ

0 голосов
/ 08 февраля 2019

Добавьте переменную jump и инициализируйте ее 0 перед основным циклом:

jump = 0  
while run:
    # [...]

Реагирует только на pygame.K_SPACE, если игроку разрешено прыгать и оставаться на земле.Если это выполнено, тогда установите jump на желаемую высоту «прыжка»:

if keys[pygame.K_SPACE] and Ycord == ScreenLenY - height:
    jump = 300

Пока jump больше 0, двигайте игрока вверх и уменьшайте jump на ту же величину, в основном цикле.
Если игрок не прыгает, что позволяет ему упасть до рассвета, пока он не достигнет земли:

 if jump > 0:
    Ycord -= vel
    jump -= vel
elif Ycord < ScreenLenY - height:
    Ycord += 1

См. демонстрацию, где я применил предложения к вашему коду:

import pygame
pygame.init()

ScreenLenX, ScreenLenY = (1000, 500)
win = pygame.display.set_mode((ScreenLenX, ScreenLenY))
pygame.display.set_caption("aman")
Xcord, Ycord = (100, 100)
length, height = (10, 10)
xmove, ymove = (1, 1)
vel = 2
jump = 0

run = True
clock = pygame.time.Clock()
while run:
    #clock.tick(60)
    for event in pygame.event.get():
        print(event)
        if event.type ==pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_RIGHT] and Xcord <= ScreenLenX-length:
        Xcord += vel
    if keys[pygame.K_LEFT] and Xcord >= 0:
        Xcord -= vel

    if keys[pygame.K_SPACE] and Ycord == ScreenLenY - height:
        jump = 300

    if jump > 0:
        Ycord -= vel
        jump -= vel
    elif Ycord < ScreenLenY - height:
        Ycord += 1

    win.fill((0, 0, 0))
    pygame.draw.rect(win, (255, 0, 0), (Xcord, Ycord, length, height))

    pygame.display.update()
...