【问题标题】:Program getting confused between GKAgent2D position and SpriteKit position程序在 GKAgent2D 位置和 SpriteKit 位置之间感到困惑
【发布时间】:2015-12-17 11:25:24
【问题描述】:

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

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' 类型的值没有成员'位置'。”

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

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

    spriteComponent.node.position = CGPoint(position)
}

CMD 点击 CGPoint(position) 将我带到 GKAgent2D。似乎这两个“位置”是相互颠倒的。任何想法如何纠正这个问题?

【问题讨论】:

  • 这是我在 XCode 中遇到的一个错误,它有时会对它正在寻找的属性感到困惑,并且会选择它认为最好的属性。您是否尝试过完全干净的构建(CMD + SHIFT + ALT + K)?
  • 谢谢。我尝试了一个干净的构建,但仍然有错误
  • 看看这个,也许对你有帮助stackoverflow.com/questions/31343504/…

标签: swift sprite-kit position gameplay-kit


【解决方案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))
  }
}

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    相关资源
    最近更新 更多