如何修复pygame中的无限跳跃错误? [英] How to fix infinite jump bug in pygame?

查看:66
本文介绍了如何修复pygame中的无限跳跃错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试制作一款游戏,但是您可以不断地向无限高发送w"(跳跃)垃圾邮件,这在您尝试制作平台游戏时非常糟糕.这是我所有的代码:

I am trying to make a game, but you can keep spamming "w" (jump) for infinite height which is really bad when you are trying to make a platformer game. This is all my code:

GRAVITY = .2

diedorgameover = False
while not diedorgameover:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            diedorgameover = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a:
                x_change = -5
            elif event.key == pygame.K_d:
                x_change = 5
            elif event.key == pygame.K_s:
                y_change = 5
            elif event.key == pygame.K_w:
                y_change = -5

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_a or event.key == pygame.K_d:
                x_change = 0
            if event.key == pygame.K_s or event.key == pygame.K_w:
                y_change = 0

    #adding gravity to y_value
    y_change += GRAVITY 
    x += x_change
    y += y_change

    if y >= gameDisplay.get_height() - 68:
        y = gameDisplay.get_height() - 68
        y_change = 0

    #draw everything   
    gameDisplay.blit(background_image,(0,0))
    red(x,y)

    pygame.display.update()
    clock.tick(60)


pygame.quit()
quit()

如果您对这个问题有任何见解,我将不胜感激.

I would really appreciate it if you have any insight on this problem.

推荐答案

您可以定义一个 on_ground 变量,如果玩家接触地面,该变量将设置为 True.当用户想要跳跃(按 'w')时,首先检查 if on_ground: 然后更改 y_change 并将 on_ground 设置为 错误.

You can define a on_ground variable that you set to True if the player touches the ground. When the user wants to jump (presses 'w') you first check if on_ground: and then change the y_change and set on_ground to False.

import pygame


pygame.init()

gameDisplay = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

GRAVITY = .5

player_img = pygame.Surface((30, 50))
player_img.fill((40, 120, 200))
x = 100
y = 500
x_change = 0
y_change = 0
on_ground = False

diedorgameover = False
while not diedorgameover:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            diedorgameover = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a:
                x_change = -5
            elif event.key == pygame.K_d:
                x_change = 5
            elif event.key == pygame.K_s:
                y_change = 5
            elif event.key == pygame.K_w:
                # Only jump if the player is on the ground.
                if on_ground:
                    y_change = -12
                    on_ground = False
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_a or event.key == pygame.K_d:
                x_change = 0

    y_change += GRAVITY
    x += x_change
    y += y_change

    # If the player is on the ground.
    if y >= gameDisplay.get_height() - 68:
        y = gameDisplay.get_height() - 68
        y_change = 0
        on_ground = True

    gameDisplay.fill((30, 30, 30))
    gameDisplay.blit(player_img, (x, y))

    pygame.display.update()
    clock.tick(60)


pygame.quit()

同时删除这些行,否则如果释放键,玩家可能会在空中停止:

Also delete these lines, otherwise the player can stop while in the air if the key is released:

if event.key == pygame.K_s or event.key == pygame.K_w:
    y_change = 0

这篇关于如何修复pygame中的无限跳跃错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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