我的播放器设置为在按下空格键时跳转,
并在释放空格键时将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
答案 0 :(得分:1)
我认为这是你的玩家重力功能。你需要考虑它在做什么,特别是:
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;