Python 为什么在pygame中跳跃不起作用

Python 为什么在pygame中跳跃不起作用,python,pygame,Python,Pygame,我不明白为什么我的球员不跳。我已将跳转和更新功能定义如下: def jump(self): if self.is_jumping == False: self.is_jumping = True def update(self): if self.is_jumping: self.y -= self.force while True: for event in pygame.event.get(): if even

我不明白为什么我的球员不跳。我已将
跳转
更新
功能定义如下:

def jump(self):
     if self.is_jumping == False:
         self.is_jumping = True

def update(self):
    if self.is_jumping:
         self.y -= self.force
while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                mm.jump()

    d.fill((98, 98, 98))
    mm.draw()
    mm.g()
    mm.update()


    if mm.y + mm.side > 550:
         mm.y = 550 - mm.side
         mm.falling = False
这是初始化

class Myman:
    def __init__(self, x, y, side):
        self.x  = x
        self.y = y
        self.side = side
        self.speed = 2
        self.is_jumping = False
我在主循环中实现了以下内容:

def jump(self):
     if self.is_jumping == False:
         self.is_jumping = True

def update(self):
    if self.is_jumping:
         self.y -= self.force
while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                mm.jump()

    d.fill((98, 98, 98))
    mm.draw()
    mm.g()
    mm.update()


    if mm.y + mm.side > 550:
         mm.y = 550 - mm.side
         mm.falling = False
然而,当我尝试跳跃时,它不起作用。到目前为止,我所看到的所有关于跳跃的例子都做了同样的事情,但我的不起作用,我也不明白为什么。谢谢你的帮助

这是供任何想查看参考的人使用的代码

import pygame, os

os.environ["SDL_VIDEO_CENTERED"] = "1"
pygame.init()

win = pygame.display
d = win.set_mode((1200, 600))
win.set_caption("Jump")

gravity = 0.1

class Myman:
    def __init__(self, x, y, side):
        self.x  = x
        self.y = y
        self.side = side
        self.speed = 2
        self.is_jumping = False
        self.force = 2

    def draw(self):
        pygame.draw.rect(d, (0 ,255, 0), (self.x, self.y, self.side, self.side))

    def g(self):
        global gravity
        self.y += gravity
        gravity += 0.01

    def move_left(self):
        self.x -= self.speed

    def move_right(self):
        self.x += self.speed

    def jump(self):
        if self.is_jumping == False:
            self.is_jumping = True

    def update(self):
        if self.is_jumping:
            self.y -= self.force


mm = Myman(600, 400, 20)

def platform():
    pygame.draw.rect(d, (0 ,0, 0), (0, 550, 1200, 50))

while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                mm.jump()

    d.fill((98, 98, 98))
    mm.draw()
    mm.g()
    mm.update()
    platform()
    keys = pygame.key.get_pressed()

    if keys[pygame.K_RIGHT]:
        mm.move_right()
    if keys[pygame.K_LEFT]:
        mm.move_left()

    if mm.y + mm.side >= 550:
        mm.y = 550 - mm.side
        mm.falling = False

    win.flip()

希望这能解决您的问题,但您的代码缩进不正确。
d.fill((98,98,98))
win.flip()
您的代码可能需要另外4个空格/1个选项卡来匹配for循环

问题是您的重力在不断增加:

def g(self):
    global gravity
    self.y  += gravity
    gravity += 0.01        # <-- HERE

风格说明:我特意在所有
if
表达式周围加上括号,因为我确实相信这会使代码更具可读性。这与PEP8中的建议相反

我不认为这是原因,因为这个代码是一个更大的代码的一部分,其他一切都很好。你介意发布它吗?这可能表明问题我写这篇文章是为了说明我的问题和其他部分与跳转无关。而且,如果我把整件事都公布出来,我可能会得到反对票。对不起,我认为情况并非如此。该缩进将导致代码仅在发生事件时更新屏幕。