Pygame - 除非在整个跳跃过程中按住跳跃按钮,否则玩家不会跳跃

时间:2013-01-30 15:33:28

标签: python input pygame

我的播放器设置为在按下空格键时跳转,
并在释放空格键时将Y veloicty(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

2 个答案:

答案 0 :(得分:1)

我认为这是你的玩家重力功能。你需要考虑它在做什么,特别是:

  • 这个神奇的数字469是什么?为什么要将它与xPos和yPos进行比较?
  • 这应该是什么实现的? self.yPos < 469: self.yVel += 1

通常,您应该编写有意义的函数名称和变量名称。这意味着用描述其目的的函数包装所有这些赋值调用。我知道xPos += 1 做了什么,但我不知道它的意图 - 它可能很容易成为一个错字。正确的函数名称(MoveRight(amount))可以避免这种情况。

您还需要学习如何确定代码“错误”的位置 - 您是否检查了self.yPos行下elif event.key == K_SPACE:的值?调试是每个程序员必须学习的技能。

这可能不是你问题的直接答案,但我更喜欢教一个人捕鱼而不是给他一条鱼......

答案 1 :(得分:0)

我在那里查看球是否在场上:

if self.yPos > 469:
    self.yPos = 469
我应该说

if self.yPos > 469:
    self.**yVel** = 0 

因为没有将球保持在469位置,后者的脚本只是说没有速度,换句话说没有移动但是球仍然是自由的。哇,那个是doozie&lt; _&gt;