Почему этот метод возвращает полигон с неправильной координатой?Я что-то не так делаю?
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)
}
}
}
Объяснение:
- Обнаружено касаниеизометрическая карта
- Затем касание преобразуется в положение 2d карты
- На карте выбирается синий куб, когда мы хотим переместить этот объект
- Получены препятствия (node2D)
- Препятствия закрашены синим цветом
- Массив GKGraphNode извлекается из "SKNode.obstacles (fromNodeBounds:"
- Путь рассчитывается для положения 2D-синего куба в месте касания (преобразован в 2D-карту положения)
- синий куб перемещен
Вот несколько скриншотов. Мы видим, что препятствия не соблюдаются, даже если синяя краска нанесена справаместо.