我正在制作乒乓球,并且发现编写一个将球正确地从四堵墙上弹开的算法真的很困难(稍后我将处理得分问题,因为只有西边和东边的一部分会进球)。所以现在我想让球在盒子周围弹跳。
检测球是否撞到墙壁很容易,但我在计算新角度时遇到困难。
这是我到目前为止所想出的:
if(dstY == 0) {
// North wall
if(angle < 90) {
newAngle = angle + 90;
} else {
newAngle = angle - 90;
}
} else if(dstX == maxWidth) {
// East wall
if(angle < 90) {
newAngle = angle + 270;
} else {
newAngle = angle + 90;
}
} else if(dstY == maxHeight) {
// South wall
newAngle = angle + 90;
} else if(dstX == 1) {
// West wall
if(angle < 270) {
newAngle = angle - 90;
} else {
newAngle = angle - 270;
}
}
这只适用于大约一半的碰撞,而且看起来非常难看。我确信这应该非常简单,而且之前已经做过很多次了。
在我的代码中,dstX/dstY 是 X/Y 目标坐标。 X=0 和 y=0 位于左上角。
您可以通过两种方式看待这个问题:
角度:如果您知道球碰撞的角度,只需执行 180 度角即可找到新角度。
渐变:可能更简单。您必须每 t 毫秒以特定的 dY 和 dX 移动球。所以如果你碰壁了,你可以简单地使用 dY 和 dX 的反转符号。例如,如果你撞到了右边的墙,dX 会变成 -dX,而 dY 会继续前进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)