1

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

2 回答 2

1

我想这是你的 playerGravity 功能。您需要考虑它在做什么,特别是:

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

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

您还需要学习查明您的代码在哪里“出错” - 您是否检查了self.yPos行下的值elif event.key == K_SPACE:?调试是每个程序员都必须学习的技能。

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

于 2013-01-30T16:29:05.690 回答
0

我检查了球是否在地板上:

if self.yPos > 469:
    self.yPos = 469

我应该说

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

因为后一个脚本没有将球的位置保持在 469,而是简单地说没有速度,换句话说,没有移动,但球仍然是自由的。哇,那是一个doozie <_>

于 2013-01-30T17:05:15.270 回答