[英]Pygame - player will not jump unless jump button is held down throughout jump
按下空格鍵時,我的播放器設置為跳躍,
並在釋放空格鍵時將Y速度(yVel)設置為0。
這會導致我一直在尋找平穩的跳躍和下降,
但是出於某種奇怪的原因,如果我在整個跳躍過程中都沒有按住空格鍵(即當他以yPos = 469着地時),
我必須打兩次空格鍵才能使他再次跳躍。
有人可以向我解釋為什么會這樣嗎?
我的代碼:
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
我可以想象這是您的playerGravity函數。 您需要考慮它在做什么,尤其是:
self.yPos < 469: self.yVel += 1
通常,您應該編寫有意義的函數名稱和變量名稱。 這意味着所有這些賦值調用都用描述其目的的函數包裝。 我知道xPos += 1
作用 ,但我不知道意圖-它很容易成為錯字。 適當的函數名稱( MoveRight(amount)
)可以避免這種情況。
您還需要學習查明代碼的“錯誤”位置-您是否self.yPos
在elif event.key == K_SPACE:
行下檢查了self.yPos
的值? 調試是每個程序員都必須學習的技能。
這可能不是您問題的直接答案,但我更喜歡教一個人釣魚而不是給他一條魚。
我檢查一下球是否在地板上:
if self.yPos > 469:
self.yPos = 469
我應該說
if self.yPos > 469:
self.**yVel** = 0
因為后一個腳本不是將球保持在469的位置,而是簡單地說沒有速度,換句話說沒有運動,但球仍然是自由的。 ,那是個傻瓜<_>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.