私のプレーヤーは、スペースバーが押されたときにジャンプし、スペースバーが
離されたときに Y 速度 (yVel) を 0 に設定するように設定されています。
これにより、私が探していたスムーズなジャンプと落下が得られるはずです
が、ジャンプの全期間を通じてスペースバーを押したままにしないと、何らかの奇妙な理由があります (つまり、yPos = 469 で地面にぶつかるとき)。 、
彼を再びジャンプさせるには、スペースバーを2回押す必要があります。
誰かが私になぜこれが起こっているのか説明してもらえますか?
私のコード:
class Player:
def __init__(self,screen,image,xPos,yPos,xVel,yVel):
self.xPos = xPos
self.yPos = yPos
self.xVel = xVel
self.yVel = yVel
self.image = image
self.screen = screen
def draw(self):
screen.blit(self.image,(self.xPos,self.yPos))
def update(self):
self.xPos += self.xVel
self.yPos += self.yVel
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_LEFT:
self.xVel = -2
elif event.key == K_RIGHT:
self.xVel = 2
elif event.key == K_SPACE:
if self.yPos == 469:
self.Jump()
elif event.key == K_DOWN:
pass
if event.type == KEYUP:
if event.key == K_LEFT:
self.xVel = 0
elif event.key == K_RIGHT:
self.xVel = 0
elif event.key == K_SPACE:
self.yVel = 0
elif event.key == K_DOWN:
pass
self.playerGravity()
def playerGravity(self):
if self.xPos > 469:
self.xPos = 469
if self.xPos < 0:
self.xPos = 0
if self.yPos > 469:
self.yPos = 469
if self.yPos < 0:
self.yPos = 0
if self.yPos < 469:
self.yVel += 1
print(self.xPos)
print(self.yPos)
def Jump(self):
##for i in range(10):
self.yVel = -20
##break