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