我正在开发一款角色反弹的游戏,就像'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 })
任何帮助都会非常感激,我只是希望玩家总是向上移动相同的数量,无论有多少次点击和多少掉线。
由于
答案 0 :(得分:0)
两个想法:
player:applyForce
中施加更大的向上力,具体取决于y轴上的速度。如果玩家没有下降,则需要较小的力量。如果它们以最终速度下降,则需要更大的力。听起来你觉得“完美”的物理在游戏中不那么有趣。通常情况就是这样。您可能需要进行实验,直到感觉不对。
答案 1 :(得分:0)
你可能忘记了力量决定了加速度,而不是速度。因此,如果物体以速度V向下移动(V为正值,因为在Corona中向下为正),则applyForce()
向物体施加瞬时向上力(持续时间:一次帧),因此物体向下速度会略微减小(由于向上的力减速),但重力是恒定的,所以你必须多次按压才能获得足够的减速度。
你可能想要的是直接setLinearVelocity()
到一个负值,从而使它看起来好像物体在触摸时“反弹”;然后重力会给它一个抛物线轨迹。此外,如果物体总是被赋予相同的线速度,那么发生多少次敲击并不重要,尽管每次敲击都会以相同的向上速度抵消重力的影响。