如何在 Pygame 中为此特定代码模拟跳跃 [英] How to simulate Jumping in Pygame for this particular code

查看:28
本文介绍了如何在 Pygame 中为此特定代码模拟跳跃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试模拟 Pygame 代码中的跳转,但一直未能成功实现.有一个尺寸为 10 x 10 的矩形,我希望该矩形在按下 SPACE 时跳跃.我现在让这个代码独立于重力.

I have been trying to simulate the jump in the Pygame code but haven't been able to successfully implement it. There is a rectangle of dimension 10 by 10 and I want that rectangle to jump when SPACE is press. I am keeping this code independent of gravity for now.

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()

推荐答案

在主循环之前添加一个变量jump并初始化为0:

Add a variable jump and initialize it by 0, before the main loop:

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

仅对 pygame.K_SPACE 做出反应,如果允许玩家跳跃并留在地面上.如果满足,则将 jump 设置为所需的跳跃"高度:

Only react on pygame.K_SPACE, if player is allowed to jump and stays on the ground. If this is fulfilled then set jump to the desired "jump" height:

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

只要 jump 大于 0,在主循环中向上移动玩家并减少 jump 相同的数量.
如果玩家没有跳跃,让他在黎明前坠落,直到他到达地面:

As long as jump is greater than 0, move the player upwards and decease jump by the same amount, in the main loop.
If the player is not jumping that let him fall dawn, till he reaches the ground:

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

查看演示,其中我将建议应用于您的代码:

See the demo, where I applied the suggestions to your code:

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()

这篇关于如何在 Pygame 中为此特定代码模拟跳跃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆