Java Rectangle2D.contains()未正确检测边界中的坐标

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

我正在为CS2课程的介绍写一个塔防游戏。我有一段代码,可以在地图上找到敌军单位的下一个坐标:

  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)
}