Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 程序混淆了GKAgent2D位置和SpriteKit位置_Swift_Sprite Kit_Position_Gameplay Kit - Fatal编程技术网

Swift 程序混淆了GKAgent2D位置和SpriteKit位置

Swift 程序混淆了GKAgent2D位置和SpriteKit位置,swift,sprite-kit,position,gameplay-kit,Swift,Sprite Kit,Position,Gameplay Kit,我正在使用GameplayKit和Swift。在我的代理的move组件中,我正在运行agentwilliupdate:但在确定位置的行上出现错误“无法使用类型为“(CGPoint)”的参数列表调用类型为“Float2”的初始化器” MoveComponent: GKAgent2D, GKAgentDelegate { init(...) func agentWillUpdate(agent: GKAgent) { guard let spriteComponent = entity?.

我正在使用GameplayKit和Swift。在我的代理的move组件中,我正在运行agentwilliupdate:但在确定位置的行上出现错误“无法使用类型为“(CGPoint)”的参数列表调用类型为“Float2”的初始化器”

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

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

    position = float2(spriteComponent.node.position)
  } 
节点位置正常(我已经用打印测试过了)。当我点击“position”时,我被带到SpriteKit的position属性,而不是GKAgent2D的属性。当我尝试使用agent.property引用属性时,调试器告诉我'GKAgent'类型的值没有成员'position'

在下一个函数调用中,我得到了与我原来的错误相反的错误,“无法使用类型为“(vector_float2)”的参数列表调用类型为“CGPoint”的初始化器”


CMD点击CGPoint(位置)将我带到GKAgent2D。这两个“位置”似乎是相互颠倒的。如果您不想每次使用这些扩展时都编写转换代码,那么您可以保留问题中的代码

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

这是我在XCode中遇到的一个bug,它有时会对它要寻找的属性感到困惑,并会选择它认为最好的属性。你有没有试过做一个完全干净的构建(CMD+SHIFT+ALT+K)?谢谢。我尝试了一个干净的构建,但是仍然有错误。看看这个,也许它会帮助你
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))
  }
}