Corona SDK,Flappy Bird反弹效果

我正在开发一个游戏,玩家角色类似于“Flappy Bird”角色。我已经得到了很好的效果,但是我是通过“触摸事件”控制跳跃效果的。当用户“快速双击”时,它会“加倍力量”地推动玩家。

另外,例如,如果玩家从较高的高度下落,那么重力似乎太大了,我必须更多地“触摸”才能将玩家重新拉起,我就是无法想出如何使每次“触摸”都与角色“弹跳”的数量一致。

这是我的弹跳效果函数:

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 })

非常感谢您的帮助,我想让玩家无论点击多少次或者掉落多少都能以相同的速度上升。谢谢。

点赞
用户7625
用户7625

两个想法:

  • 为了避免双重触摸/弹跳,可应用一个冷却期。当用户触摸时,忽略一定时间内的其他触摸。
  • 严格来说,每次触摸您 能得到相同量的弹跳(或向上的力)。看起来您希望根据当前向地面的速度调整弹跳力度。这并不难。尝试在player:applyForce上应用更多的向上力量,取决于y轴上的速度。如果玩家没有掉落,只需要小量力量。如果他们正在以极限速度下落,需要更大力量。

听起来你认识到“完美”的物理在你的游戏中不那么有趣。这通常是这样的。直到感觉正确之前,你可能需要尝试一些实验。

2014-05-20 18:22:00
用户869951
用户869951

你可能忘记了力量决定了加速度而不是速度。所以,如果你有一个以速度V向下移动的物体(V是正值,因为在 Corona 中向下是正数),那么 applyForce() 会对物体施加一个瞬时的向上力(持续时间:一个帧),使物体的向下速度会稍微减少(由于向上力而减速),但重力是恒定的,所以你需要多次按下以获得足够的减速度。

你可能想要的是直接将 setLinearVelocity() 设为负值,这样看起来好像对象在触摸时“反弹”向上;重力将给它带来抛物线轨迹。如果物体一直被赋予相同的线性速度,那么无论有多少次轻拍,都没有关系,尽管每次轻拍都会用同样的向上速度抵消重力的影响。

2014-05-21 05:45:22