基本突破缩放数学
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 来找到中心。
我目前正在开发一款闯关游戏,但遇到了一道数学题。这是场景。
小球有一个水平速度,名为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 来找到中心。