我正在做一个简单的突破游戏,我有一些问题,当球击中顶部边界时如何计算角度。当球以180度的角度向上移动时,它以0度的角度向下弹回。但是当球以170度的角度向上移动时,它应该以镜像角度向下弹回,如10度。我可以像180-170 = 10
度计算这个,但如果球以190度的角度向上移动怎么办?然后它应该以350度的角度向下弹回,但我不知道如何计算这个!?
是否有一种简单的方法来计算或反映球的向上移动角度的值?提供一些帮助因为我不擅长数学!谢谢!
编辑: 我这样移动球:
xPos += speed * Math.sin(Math.toRadians(direction));
yPos += speed * Math.cos(Math.toRadians(direction));
答案 0 :(得分:4)
回答有关角度和反思的问题:
确定您的角度测量系统。你告诉我一个向上移动的球是180°
的角度,所以我猜0°
指向下方,角度以逆时针方向增加(90°
指向对等等)。保持一致非常重要。让d
成为该系统中球的运动角度。
定义边框法线向量的角度。如果顶部的边界是水平的,则其法向量垂直于它并且具有0°
的角度(在点1中定义的测量系统中)。让n
成为那个角度。垂直边框将为n = 90°
。
球的出射角o
由下式给出:
o = 2*n - d - 180°
请注意,您可能必须对此角度进行标准化,即您在360°
之前添加/减去0° <= o < 360°
。
d = 190°, n = 0°
的示例:
o = 2*0° - 190° - 180° = -370°
正常化后,这将导致o = 350°
,如预期的那样。
答案 1 :(得分:0)
这很容易。当球弹跳水平面时,只需改变它垂直速度的标志。而当它击中垂直墙的垂直速度变化标志。我希望你有速度和坐标作为2D矢量(一对水平和垂直分量),如x,y作为球坐标和vX,vY作为球速。
也许这是一个好主意,当球撞到砖块时,它会在撞击之前向后移动一步,然后进行速度分量符号反转。