对于我的一个项目,我试图这样做,如果我点击w,它会跳跃,但如果我持有,它会得到一点提升并跳得更高。
然而,在我放手之后,我不希望它跳跃,但在此期间。
我正在使用pygame.math.Vector2作为运动矢量,并设置了加速度和速度。当我跳跃它应用加速度,我有重力拉下来。
感谢您的帮助!
(如果我不清楚只是告诉我,我不太擅长解释事情......:/)
答案 0 :(得分:2)
你可以做的是使用某种类型的时间变量来检查" W"性格被压制住了。如果它只是被按下,那么它只会跳一次,但是如果按住键,让我们说800毫秒,那么你不会跳跃,而是跳高跳跃或提升跳跃。
这是一些sudo代码:
# this variable will keep track of your time
# look for an online time library for python
time = 0;
# Check for "W" key and duration of press
if keypressed = w:
if time < 800 miliseconds:
# Execute normal jump
else:
# Execute boosted jump
答案 1 :(得分:1)
我不确定是否可以在pygame中检查是否保持/点击了某个键,但您始终可以将这两种类型绑定到不同的键。
如果您正在使用pos向量和重力变量,则此碰撞代码将起作用。每当你跳过时,一定要将on_ground设置为False。
self.pos.x += self.vel.x * dt
self.rect.x = self.pos.x
collisions = pg.sprite.spritecollide(self, self.blocks, False)
for block in collisions:
if self.vel.x > 0:
self.rect.right = block.rect.left
elif self.vel.x < 0:
self.rect.left = block.rect.right
self.pos.x = self.rect.x
self.pos.y += self.vel.y * dt
self.rect.y = self.pos.y
collisions = pg.sprite.spritecollide(self, self.blocks, False)
for block in collisions:
if self.vel.y > 0:
self.rect.bottom = block.rect.top
self.vel.y = 0
self.on_ground = True
elif self.vel.y < 0:
self.rect.top = block.rect.bottom
self.vel.y = 0
self.pos.y = self.rect.y
if self.rect.bottom >= WINDOW_HEIGHT:
self.vel.y = 0
self.rect.bottom = WINDOW_HEIGHT
self.pos.y = self.rect.y
self.on_ground = True
else:
self.vel.y += GRAVITY * dt # Gravity
P.S检查以下问题是否有按键回答。