【发布时间】:2013-07-04 13:13:40
【问题描述】:
在画布上,我有一个球在重力作用下落到地上
vy += gravity
ball.y += vy
我想让球反弹,所以我实现了一个近似的解决方案来检测球是否已经越过地面边界,如果是的话,将它的位置重置到地面,并将它的速度翻转为负数方向。
if (ball.y + ball.radius > bottom) {
ball.y = bottom - ball.radius;
vy *= -1;
但是,我希望这是 100% 准确的。要做到这一点,ball.y 需要稍微高于地面,它的速度将略低于 -vy,因为重力已经开始减慢它。如何计算这些更准确的值?
地面以下的距离为ball.y + ball.radius - bottom。所以必须有一个公式可以将其转换为地面以上的距离,我认为是ball.y = (2 * bottom) - ball.y - 2*ball.radius;
这就是我卡住的地方。到目前为止我是对的吗?我现在需要计算新的速度。我确信这是可能的,但我就是无法理解它。有人可以帮忙吗?
【问题讨论】:
标签: canvas collision-detection physics game-physics gravity