Corona SDK,飞扬的鸟弹跳效果

时间:2014-05-20 15:12:18

标签: lua corona bounce

我正在开发一款角色反弹的游戏,就像'Flappy Bird"字符。

我让它运作良好,但是我用touch event处理弹跳效果,当用户double touches在玩家后面基本上doubles the force时真的很快。{

此外,例如,如果播放器是dropping的{​​{1}},那么higher height似乎太多,我必须gravity多次带来touch玩家备份,我似乎无法弄清楚如何使每个touch与字符bounces的数量保持一致。

这是弹跳效果的功能:

function flyUp(event)
    if event.phase == "began" then
        if gameStarted == false then
            player.bodyType = "dynamic"
            instructions.alpha = 0
            tb.alpha = 1
            addColumnTimer = timer.performWithDelay(1000, addColumns, -1)
            moveColumnTimer = timer.performWithDelay(2, moveColumns, -1)
            gameStarted = true

            player:applyForce(0, -300, player.x, player.y)
        else
            player:applyForce(0, -460, player.x, player.y)
        end
    end
end

...这里是我的玩家被定义为物理身体的地方:

physics.addBody(player, "static",
    { density=.106, bounce=.1, friction=1, radius = 30 })

任何帮助都会非常感激,我只是希望玩家总是向上移动相同的数量,无论有多少次点击和多少掉线。

由于

2 个答案:

答案 0 :(得分:0)

两个想法:

  • 要避免双触/双反,请应用冷却期。当用户触摸时,忽略额外的触摸一段时间。
  • 严格地说, 每次触摸都会获得相同数量的反弹(或向上力)。听起来你想要一个可变的弹跳,取决于当前的速度对地面。这不应该太难。尝试在player:applyForce中施加更大的向上力,具体取决于y轴上的速度。如果玩家没有下降,则需要较小的力量。如果它们以最终速度下降,则需要更大的力。

听起来你觉得“完美”的物理在游戏中不那么有趣。通常情况就是这样。您可能需要进行实验,直到感觉不对。

答案 1 :(得分:0)

你可能忘记了力量决定了加速度,而不是速度。因此,如果物体以速度V向下移动(V为正值,因为在Corona中向下为正),则applyForce()向物体施加瞬时向上力(持续时间:一次帧),因此物体向下速度会略微减小(由于向上的力减速),但重力是恒定的,所以你必须多次按压才能获得足够的减速度。

你可能想要的是直接setLinearVelocity()到一个负值,从而使它看起来好像物体在触摸时“反弹”;然后重力会给它一个抛物线轨迹。此外,如果物体总是被赋予相同的线速度,那么发生多少次敲击并不重要,尽管每次敲击都会以相同的向上速度抵消重力的影响。