基本突破缩放数学

Basic Breakout Scaling Maths

我目前正在开发一款闯关游戏,但遇到了一道数学题。这是场景。

小球有一个水平速度,名为bxspd。 球有一个名为 bx 的 X 坐标。 球有一个最大速度,称为 bspd。 蝙蝠有x坐标,命名为px。

当球与球棒相撞时,需要相对于球棒的位置沿水平方向弹开。所以换句话说:

//碰撞事件 bxspd = bx - px.

这样,当球击中球棒的左侧时,球会弹回左侧。越往蝙蝠中心左侧,水平速度向左越快

问题是我的球棒从中心到每边的宽度为 50。我如何将其缩放到球的最大速度?所以换句话说,如果它击中球棒的最左角,bxspd 变为 -2 而不是 -50?

此致, 克拉丽丝

假设球击中球棒的右外侧边缘,则它的速度会增加 extrabatspeed,在中间速度为 0,在左侧速度为 -extrabatspeed。球棒的宽度为 batwidth,它在 batcollisionx 处与球碰撞,其值介于 0 和 batwidth 之间。我假设 x-axis 从左到右。

然后你可以计算 ballspeedx 的变化为 2 * extrabatspeed * ballcollisionx / batwidth - extrabatspeed

碰撞时 ballspeedy 变为负值。

封顶 ball-speed 应该在之后发生。计算速度 sqrt(x^2 + y^2) 并用相同的系数修正 x 和 y。

写完问题后,不知何故点击到位,所以这里是为需要它的人提供的解决方案。

bdx = ((bx - (px + (pwidth / 2))) / (pwidth / 2)) * bspd;

bdx 是球的 xspeed。 bx 是球的 x 位置。 px 是蝙蝠的 xposition。 pwidth 是蝙蝠的宽度。 bspd 是球的最大速度变量,因此 bdx 是相对于最大球速度 (bspd) 计算的。

请注意,此公式也适用于偏移量。原因是玩家的 X 位于球棒的 left-most 侧。所以为了找到中心,我们将 pwidth / 2 添加到玩家的 x 来找到中心。