我实现了一种 Pong,其中 Racket (Rectangle2D) 可以旋转。 为了获得更高的准确性,许多事情都由 Graphics2D 管理。 旋转也由上一个类的方法 rotate(...) 管理。
为了达到真实的弹跳效果,我需要知道球击中 Racket 的位置(只是侧面,而不是特定点)。
我尝试定义(并旋转)两个代表桨的背面和正面的 Rectangle2D,然后通过 hit 方法识别这两个中的一个的弹跳(Rectangle2D r, Shape s, boolean onStroke),但它不能正常工作。
这是 Java 类 Graphics2D:
http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html
你有什么想法吗?
最佳答案
假设您有一个长方形的 Racket ,并且知道长方形和圆的中心以及长方形的旋转角度。 假设旋转为零意味着您的矩形水平对齐(宽度 > 高度)。
- 计算差值 vector (圆心)-(矩形中心)
- 获取该 vector 的角度并减去矩形的旋转( vector 的角度为 Math.atan2(y, x))
- 结果值 a 告诉您圆的相对方向
- 确保a在0到2*pi之间
q = Math.atan2(矩形的高度,矩形的宽度)
- 如果 a 介于 q 和 pi-q 之间,则您的圆圈击中了前面的长(上)边。
- 如果 a 小于 q 或大于 2*pi-q 它在右侧。
- 如果 a 在 pi-q 和 pi+q 之间,则它在左侧。
- 如果 a 在 pi+q 和 2pi-q 之间,它就到达了矩形的底部
关于java - 使用图形的桨碰撞侧检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479060/