Программа путается между позицией GKAgent2D и позицией SpriteKit

Я использую GameplayKit и Swift. В компоненте перемещения моего агента я запускаю agentWillUpdate:, но получаю сообщение об ошибке «Невозможно вызвать инициализатор для типа Float2 со списком аргументов типа (CGPoint)» в строке, где определяется позиция.

MoveComponent: GKAgent2D, GKAgentDelegate {
init(...)
func agentWillUpdate(agent: GKAgent) {

    guard let spriteComponent = entity?.componentForClass(SpriteComponent.self) else {
      return
    }

    position = float2(spriteComponent.node.position)
  } 

Положение узла в порядке (я проверил это с печатью). Когда я щелкаю CMD по «позиции», я перехожу к свойству позиции SpriteKit, а не к свойству GKAgent2D. Когда я пытаюсь сослаться на свойство с помощью agent.property, отладчик сообщает мне: «Значение типа GKAgent не имеет позиции члена».

При следующем вызове функции я получаю ту же ошибку, что и моя исходная, в обратном порядке: «Невозможно вызвать инициализатор для типа« CGPoint »со списком аргументов типа« (vector_float2) »»

func agentDidUpdate(agent: GKAgent) {
        guard let spriteComponent = entity?.componentForClass(SpriteComponent.self) else {
            return
        }

    spriteComponent.node.position = CGPoint(position)
}

Щелчок CMD через CGPoint (позиция) приводит меня к GKAgent2D. Кажется, что две «позиции» перевернуты друг с другом. Любые идеи, как это исправить?


person Shane O'Seasnain    schedule 17.12.2015    source источник
comment
Это ошибка, с которой я столкнулся в XCode, иногда он путается в том, какое свойство ищет, и выбирает то, что считает лучшим. Вы пытались сделать полную чистую сборку (CMD + SHIFT + ALT + K)?   -  person Knight0fDragon    schedule 17.12.2015
comment
Спасибо. Я пробовал чистую сборку, но все еще есть ошибки   -  person Shane O'Seasnain    schedule 17.12.2015
comment
Посмотрите это, возможно, это поможет вам stackoverflow.com/questions/31343504/   -  person Knight0fDragon    schedule 17.12.2015


Ответы (1)


Если вы не хотите писать код преобразования каждый раз, когда вы используете эти расширения, вы можете сохранить код, который у вас был в вашем вопросе.

extension CGPoint {
  init(_ point: float2) {
    x = CGFloat(point.x)
    y = CGFloat(point.y)
  }
}

extension float2 {
  init(_ point: CGPoint) {
    self.init(x: Float(point.x), y: Float(point.y))
  }
}
person Allanah Fowler    schedule 02.06.2016