簡體   English   中英

Pygame-玩家不會跳躍,除非在整個跳躍過程中按住跳躍按鈕

[英]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函數。 您需要考慮它在做什么,尤其是:

  • 這個幻數469是什么? 為什么將它與xPos和yPos進行比較?
  • 這應該實現什么? self.yPos < 469: self.yVel += 1

通常,您應該編寫有意義的函數名稱和變量名稱。 這意味着所有這些賦值調用都用描述其目的的函數包裝。 我知道xPos += 1 作用 ,但我不知道意圖-它很容易成為錯字。 適當的函數名稱( MoveRight(amount) )可以避免這種情況。

您還需要學習查明代碼的“錯誤”位置-您是否self.yPoselif 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM