Python Platformer:跳跃角色

时间:2018-04-24 19:28:14

标签: python pygame

对于我的一个项目,我试图这样做,如果我点击w,它会跳跃,但如果我持有,它会得到一点提升并跳得更高。

然而,在我放手之后,我不希望它跳跃,但在此期间。

我正在使用pygame.math.Vector2作为运动矢量,并设置了加速度和速度。当我跳跃它应用加速度,我有重力拉下来。

感谢您的帮助!

(如果我不清楚只是告诉我,我不太擅长解释事情......:/)

2 个答案:

答案 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检查以下问题是否有按键回答。