我正在创建一个简单的模拟器,用于基本的投掷球形物体(我被巧妙地称为球)。当用户点击屏幕时,球将以(从球到鼠标的距离)的速度开始朝这个方向移动。球会受到重力的影响,因此会以抛物线的形式运动。
最初的计划是按照以下方式实现这一点(伪代码,为了清晰起见删除了动态滴答校正):
on click:
ball.forwardTheta = atan2(mouseY - ball.y, mouseY - ball.x)
ball.speed = sqrt((mouseX - ball.x)^2 + (mouseY - ball.y)^2) / 50
tick:
ball.x += ball.speed * cos(ball.forwardTheta),
ball.y += ball.speed * sin(ball.forwardTheta);
ball.forwardTheta += Math.PI / constGravity;这导致了一个与我想要的系统类似的系统,然而,我担心这会引起更多的问题,例如,一旦我尝试实现球在反射角度上弹跳等等,因为目前大多数情况下,一个球以Pi/2的角度(直线向下)与一个表面发生碰撞,这意味着没有反射角。
经过一些研究,引力的一个常见的简单实现方法是从运动物体的y坐标中减去一个恒定的重力值,然而这对我来说似乎不合适,但更像是欺骗,所以我的问题是,在二维空间中,物体抛物线运动的重力实现的“适当”方法。
发布于 2018-01-22 05:56:05
重力会加速,所以速度(而不是明确的坐标)会改变每一个滴答。
一般情况下
ball.speed.x = ball.speed.x + acceleration.x * timequant
ball.speed.y = ball.speed.y + acceleration.y * timequant对于y-定向重力的情况
ball.speed.y = ball.speed.y + g * timequant速度的x分量没有变化
并不是按组件的速度表示可以帮助您进行反射计算(例如,垂直边框的反射否定x分量)。
https://stackoverflow.com/questions/48373552
复制相似问题