【发布时间】:2010-12-29 00:02:17
【问题描述】:
我正在打乒乓球,并且发现很难编写一个正确地将球从四壁上弹回的算法(我稍后会处理得分,因为只有西部+东部的一部分会进球) .所以现在我想让球在禁区周围反弹。
检测球是否撞墙很容易,但我在计算新角度时遇到了麻烦。
这是我目前想出的:
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。
【问题讨论】:
-
你能描述一下它是如何失败的吗?如果球正好击中角球会发生什么?
标签: java collision-detection bounce