pygame平台游戏跳转代码未按预期执行

问题描述

对于我的 a-level 课程作业,我正在创建一个游戏,我正在努力让我的精灵跳跃。很难解释发生了什么,但我会尽力而为。当我按下作为我的跳跃按钮的向上箭头时,精灵看起来更高而不是平滑跳跃然后下降,我认为它只是因为我实施的重力功能而下降。

这是特别不工作的代码部分,到目前为止,我只尝试为我的第一个精灵添加功能,因此主要是我用主题标签突出显示的部分

def level1():
    global running,jumping1
    global x1,y1,x2,y2,xChange1,yChange1,xChange2,yChange2,jump1,jump2,jumping1,jumping2,isJump

    while running:
        clock.tick(FPS)
        
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    xChange1 = -5
                if event.key == pygame.K_RIGHT:
                    xChange1 = 5
###############################################################################
                if not jumping1:
                    if event.key == pygame.K_UP:
                        jumping1 = True
                else:
                    if jump1 >= -25:
                        y1 -= (jump1 **2) * 0.5
                        jump1 -= 1
                    else:
                        jump1 = 10
                        jumping1 = False
##############################################################################
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    xChange1 = 0


            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    xChange2 = -5
                elif event.key == pygame.K_d:
                    xChange2 = 5
                elif event.key == pygame.K_w:
                    yChange2 = -5
                elif event.key == pygame.K_s:
                    yChange2 = 5
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_a or event.key == pygame.K_d:
                    xChange2 = 0
                elif event.key == pygame.K_s or event.key == pygame.K_w:
                    yChange2 = 0           

        x1 += xChange1
        x2 += xChange2
        y1 += yChange1
        y2 += yChange2

        y1 -= gravity1
        y2 -= gravity2
        
        screen.blit(game_image,(0,0))
        character1(x1,y1)
        character2(x2,y2)
        gameFloor(fx,fy)

        if x1 < 0:
            x1 = 0
        if x1 > WIDTH - Char1WIDTH:
            x1 = WIDTH - Char1WIDTH

        if y1 < 0:
            y1 = 0
        if y1 > HEIGHT - Char1HEIGHT - 50:
            y1 = HEIGHT - Char1HEIGHT - 50

        if x2 < 0:
            x2 = 0
        if x2 > WIDTH - Char2WIDTH:
            x2 = WIDTH - Char2WIDTH

        if y2 < 0:
            y2 = 0
        if y2 > HEIGHT - Char2HEIGHT-50:
            y2 = HEIGHT - Char2HEIGHT -50


            
        pygame.display.flip()

我不确定你是否可以放置链接,但我已经创建了一个指向我的整个代码链接,因为我认为它太长而无法包含在帖子中:https://trinket.io/python/189549b1dd

解决方法

你不应该把你的跳跃部分放在 pygame.event 循环中,因为只有当你再次按下这个键时它才会起作用。而是

                if event.key == pygame.K_UP:
                    if not jumping1:    
                        jumping1 = True

然后将跳转函数放在主循环中的某个位置,但不在pygame.event.get()循环中

               if jumping1:
                    if jump1 >= -25:
                        y1 -= (jump1 **2) * 0.5
                        jump1 -= 1
                    else:
                        jump1 = 10
                        jumping1 = False

应该没问题