Java Rectangle2D.contains()未正确检测边界中的坐标
我正在为CS2课程的介绍写一个塔防游戏。我有一段代码,可以在地图上找到敌军单位的下一个坐标:Java Rectangle2D.contains()未正确检测边界中的坐标,java,scala,collision-detection,Java,Scala,Collision Detection,我正在为CS2课程的介绍写一个塔防游戏。我有一段代码,可以在地图上找到敌军单位的下一个坐标: def findNextCoordinate(): (Double, Double) = { val numAccessibleCoordinates = 8 val angle = 360 / numAccessibleCoordinates val pixelsPerFrame = speed / MainGame.fps //hypotenuse val cur
def findNextCoordinate(): (Double, Double) = {
val numAccessibleCoordinates = 8
val angle = 360 / numAccessibleCoordinates
val pixelsPerFrame = speed / MainGame.fps //hypotenuse
val currentCoor = coordinates
def getAccessibleCoordinates(c: (Double, Double)): Array[(Double, Double)] = {
val points = Array.fill(numAccessibleCoordinates)((0.0, 0.0))
for (i <- 0 until numAccessibleCoordinates) {
val currAngle = angle * i
val x = math.cos(currAngle) * pixelsPerFrame
val y = math.sin(currAngle) * pixelsPerFrame
points(i) = ((currentCoor._1 + x), (currentCoor._2 + y))
}
points
}
val accessiblePoints = getAccessibleCoordinates(coordinates)
var nextCoor = accessiblePoints(0)
var distFromFinish = Coordinate.distanceBetween(coordinates, MainGame.finishCoordinates)
for (pt <- accessiblePoints) {
val ptDistFromFinish = Coordinate.distanceBetween(pt, MainGame.finishCoordinates)
var containsTower = Tower.containsTower(pt)
println(containsTower)
if (ptDistFromFinish <= distFromFinish && !containsTower) {
nextCoor = pt
distFromFinish = ptDistFromFinish
}
}
nextCoor
}
def findNextCoordinate():(双精度,双精度)={
val NumacAccessibleCoordinates=8
val角度=360/numAccessibleCoordinates
val pixelsPerFrame=speed/MainGame.fps//斜边
val currentCoor=坐标
def getAccessibleCoordinates(c:(双精度,双精度)):数组[(双精度,双精度)]={
val点=数组填充(numAccessibleCoordinates)((0.0,0.0))
对于(i你的默认情况是在没有比呆在原地更好的选择的情况下继续进行x
。默认情况下,你会直接撞上一座塔。你应该将默认情况更改为其他情况,或者使用类似
getAccessibleCoordinates.filterNot( containsTower ).minBy{ pt =>
Coordinate.distanceBetween(pt, MainGame.finishCoordinates)
}
假设始终至少有一个可访问的坐标
顺便说一句,路径通常不是一个容易的问题,上面的解决方案会给你留下一个振荡的解决方案,一个阻塞的爬行会在两个最近的点之间来回运行。但这可能比仅仅跑进一座塔要好,因为任何其他移动都会把你带到比现在更远的地方
getAccessibleCoordinates.filterNot( containsTower ).minBy{ pt =>
Coordinate.distanceBetween(pt, MainGame.finishCoordinates)
}