如何验证玩家是否可以跳?

时间:2015-02-02 13:59:25

标签: lua box2d collision-detection love2d

我正在使用lua与Löve2D框架进行小型游戏,并且他包含Box2D的绑定,我正在尝试验证玩家是否可以跳转,所以我使用了这段代码(这不是整个代码,只是必要的):

function love.update(dt)
    world:update(dt)
    x,y = player.body:getLinearVelocity()
    if y == 0 then cantJump = false else cantJump = true end

    player.body:setAngle(0)
    player.x = player.body:getX() - 16 ; player.y = player.body:getY() - 16;

    if love.keyboard.isDown("d") then player.body:setX(player.body:getX() + 400*dt) ; player.body:applyForce(0,0) end
    if love.keyboard.isDown("q") then player.body:setX(player.body:getX() - 400*dt) ; player.body:applyForce(0,0) end
    if love.keyboard.isDown(" ") and not cantJump then player.body:setLinearVelocity(0,-347) end
 end

但我的问题是检测有点随机,有时候玩家可以在地面或某些物体上跳跃,有时他不能。我该如何解决?

1 个答案:

答案 0 :(得分:1)

正如Bartek所说,你不应该做y == 0,因为y是一个浮点变量,并且它可能不会完全等于0,特别是在物理引擎中。 / p>

使用像这样的epsilon值:

x,y = player.body:getLinearVelocity()
epsilon = 0.5 -- Set this to a suitable value
if math.abs(y) < epsilon then cantJump = false else cantJump = true end

如果玩家的cantJump = true位置在y的{​​{1}}范围内,则说“0.5”。当然,你会想要试验看看什么是好的epsilon值。我只是随意挑选了0