GKObstacleGraph неправильный GKPolygonObstacle from GKNode bounds - PullRequest
0 голосов
/ 29 января 2019

Почему этот метод возвращает полигон с неправильной координатой?Я что-то не так делаю?

open class func obstacles(fromNodeBounds nodes: [SKNode]) -> [GKPolygonObstacle]

Вот код, который я запускаю:

func touch(touch: UITouch){
  let touchLocation = touch.location(in: mapIso)
  var touchPos2D = pointIsoTo2D(p: touchLocation)

  if let characterEntity = entities.first(where: { (entity) -> Bool in
    return entity.isKind(of: BigBlue.self)
  }){
    if let movementComponent = characterEntity.component(ofType: MovementComponent.self), let spriteComponent = characterEntity.component(ofType: SpriteComponent.self){

      // Create path and move from 2D map
      let nodes2D = entities.filter { (entity) -> Bool in
        return entity.component(ofType: SolidComponent.self) != nil && entity != characterEntity
        }.compactMap { (entity) -> SKSpriteNode? in
          return entity.component(ofType: SpriteComponent.self)?.node2D
      }

      // Highlight obstacles
      nodes2D.forEach { (node) in
        node.color = UIColor.blue
        node.colorBlendFactor = 0.5
      }

      let obstacles = SKNode.obstacles(fromNodeBounds: nodes2D)
      let path = find2DPath(from: spriteComponent.node2D!.position, to: touchPos2D, obstacles: obstacles)
      movementComponent.move(from: path)
    }
  }
}

Объяснение:

  1. Обнаружено касаниеизометрическая карта
  2. Затем касание преобразуется в положение 2d карты
  3. На карте выбирается синий куб, когда мы хотим переместить этот объект
  4. Получены препятствия (node2D)
  5. Препятствия закрашены синим цветом
  6. Массив GKGraphNode извлекается из "SKNode.obstacles (fromNodeBounds:"
  7. Путь рассчитывается для положения 2D-синего куба в месте касания (преобразован в 2D-карту положения)
  8. синий куб перемещен

Вот несколько скриншотов. Мы видим, что препятствия не соблюдаются, даже если синяя краска нанесена справаместо.

enter image description here enter image description here enter image description here

...