【问题标题】:Corona SDK, flappy bird bounce effectCorona SDK,小鸟弹跳效果
【发布时间】:2014-05-21 13:45:22
【问题描述】:

我正在开发一款游戏,其中角色的弹跳与“Flappy Bird”角色非常相似。

我让它运行良好,但我正在使用touch event 处理弹跳效果,当用户double touches 真的很快时,它基本上是在播放器后面的doubles the force

另外,举个例子,如果玩家是dropping 来自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 })

任何帮助都将不胜感激,我只是希望玩家无论点击多少次和下降多少都始终向上移动相同的数量。

谢谢

【问题讨论】:

    标签: lua coronasdk bounce


    【解决方案1】:

    您可能忘记了力决定加速度,而不是速度。所以如果你有一个物体以速度 V 向下移动(V 是正值,因为在 Corona 中向下是正值)然后applyForce() 会向物体施加一个瞬间向上的力(持续时间:一个时间框架),所以物体的向下速度将稍微减少一点(由于向上的力而减速),但重力是恒定的,因此您必须多次按下才能获得足够的减速。

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

    【讨论】:

      【解决方案2】:

      两个想法:

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

      听起来您意识到“完美”的物理在您的游戏中不那么有趣。情况往往如此。您可能需要进行试验,直到感觉正确为止。

      【讨论】:

      • 感谢您的回答!我发现如果我简单地将 applyForce 更改为 setLinearVelocity 并将重力调低一点,那么玩家在漂浮时会保持一致。
      猜你喜欢
      • 2020-04-08
      • 2017-07-05
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多