我目前正在开展一场突破性比赛,而且我遇到了数学问题。这是场景。
球具有水平速度,名为bxspd。 球有一个名为bx的X坐标。 球具有最大速度,名为bspd。 蝙蝠有x坐标,名为px。
当球与球棒碰撞时,它需要在相对于球棒位置的水平方向上反弹。换句话说:
//碰撞事件 bxspd = bx - px。
这样,当球击中击球的左侧时,球会向左侧反弹。蝙蝠中心的左侧越远,它的水平速度越快到左侧。
问题是我的蝙蝠距离中心的每侧宽度为50。如何将其缩放到球的最大速度?所以换句话说,如果它击中了球棒的最左角,则bxspd变为-2而不是-50?
此致 克拉丽斯
答案 0 :(得分:0)
假设球击中球棒的外右边缘,那么球的额外速度为extrabatspeed
,在中心位置为0,在左侧得到-extrabatspeed
。蝙蝠的宽度为batwidth
,它与batcollisionx
处的球碰撞,其值介于0和batwidth
之间。我假设x轴从左到右。
然后,您可以将ballspeedx
中的更改计算为2 * extrabatspeed * ballcollisionx / batwidth - extrabatspeed
。
碰撞ballspeedy
变为否定。
之后应该发生加速球速度。将速度计算为sqrt(x^2 + y^2)
,并用相同的因子校正x和y。
答案 1 :(得分:0)
在写完问题之后,某些东西会被点击到位,所以这里是需要它的人的解决方案。
bdx =((bx - (px +(pwidth / 2)))/(pwidth / 2))* bspd;
bdx是球的x速度。 bx是球的xposition。 px是蝙蝠的xposition。 pwidth是蝙蝠的宽度。 bspd是球的最大速度变量,因此bdx是相对于最大球速(bspd)计算的。
请注意,此公式也适用于偏移量。原因是玩家的X位于蝙蝠的最左侧。因此,为了找到中心,我们将pwidth / 2添加到玩家的x以找到中心。