所以我做了以下游戏:
玩家自由移动并射击从墙壁反弹的子弹。我正在尝试实现自动瞄准。我试图使用围绕播放器的线来实现这一点。
现在我遇到的问题是计算线与墙相交的位置。我不确定如何做到这一点。
我不能使用getBounds(),因为这些行不是2DRectangles。如果有人知道如何计算线与墙相交的位置,并返回该位置,那将非常有帮助。
答案 0 :(得分:0)
你只需要在这里做数学。
假设您的专线以(startX, startY)
开头并以(endX, endY)
结束。然后使用基本的成绩 - 学校几何,线上的任何点(x,y)
都满足等式
(y-startY) / (x-startX) = (endY - startY) / (endX - startX)
当然,
(endY - startY) / (endX - startX)
只是线的斜率,所以设置
slope = (endY - startY) / (endX - startX)
然后你有
(y-startY) / (x-startX) = slope
如果您知道起点(行的startX
和startY
)和角度,这可能会更方便,因为您可以slope = Math.tan(angle)
。
对于与水平墙相交的示例,墙边缘上的所有点都具有相同的y坐标,称之为wallY
。因此,如果x
是交集的x坐标,那么
(wallY-startY) / (x-startX) = slope
你可以重新安排到
x = startX + (wallY-startY) / slope
所以交点是(x, wallY)
,x
与上一个等式相同。
如果墙是有限的(即它有起点和终点x点),那么检查线是否实际上与墙相交只是x >= wallStartX && x <= wallEndX
,假设wallStartX
是左端墙和wallEndX
右端。
如果墙是垂直的,那么数学基本相同,除了你知道墙上的x
坐标(比如x = wallX
),你想找到y
坐标。因此,只需在第一个(或第四个)等式中用wallX
代替x
,然后求解y
。
如果墙不是水平的或垂直的,那么数学会稍微复杂一些,但并不多。 (留给读者练习。)
答案 1 :(得分:0)
您可以使用经过良好测试的JTS库来执行此类操作。