程序混淆了 GKAgent2D 位置和 SpriteKit 位置
Program getting confused between GKAgent2D position and SpriteKit position
我正在使用 GameplayKit 和 Swift。在我的代理的移动组件中,我是 运行 agentWillUpdate: 但在确定位置的行上收到错误 "Cannot invoke initialiser for type 'Float2' with an argument list of type '(CGPoint)'"。
MoveComponent: GKAgent2D, GKAgentDelegate {
init(...)
func agentWillUpdate(agent: GKAgent) {
guard let spriteComponent = entity?.componentForClass(SpriteComponent.self) else {
return
}
position = float2(spriteComponent.node.position)
}
节点位置没问题(我用打印测试过)。当我通过 CMD 单击 'position' 时,我被带到了 SpriteKit 的位置 属性,而不是 GKAgent2D 的 属性。当我尝试用 agent.property 引用 属性 时,调试器告诉我“'GKAgent' 类型的值没有成员 'position.'
在下一个函数调用中,我得到了与我原来的相反的错误,"Cannot invoke initialiser for type 'CGPoint' with an argument list of type '(vector_float2)'"
func agentDidUpdate(agent: GKAgent) {
guard let spriteComponent = entity?.componentForClass(SpriteComponent.self) else {
return
}
spriteComponent.node.position = CGPoint(position)
}
通过 CGPoint(位置)单击 CMD 将我带到 GKAgent2D。看来这两个 "positions" 是相互颠倒的。有什么想法可以解决这个问题吗?
如果您不想每次都编写转换代码,您可以使用这些扩展,然后您可以保留问题中的代码。
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))
}
}
我正在使用 GameplayKit 和 Swift。在我的代理的移动组件中,我是 运行 agentWillUpdate: 但在确定位置的行上收到错误 "Cannot invoke initialiser for type 'Float2' with an argument list of type '(CGPoint)'"。
MoveComponent: GKAgent2D, GKAgentDelegate {
init(...)
func agentWillUpdate(agent: GKAgent) {
guard let spriteComponent = entity?.componentForClass(SpriteComponent.self) else {
return
}
position = float2(spriteComponent.node.position)
}
节点位置没问题(我用打印测试过)。当我通过 CMD 单击 'position' 时,我被带到了 SpriteKit 的位置 属性,而不是 GKAgent2D 的 属性。当我尝试用 agent.property 引用 属性 时,调试器告诉我“'GKAgent' 类型的值没有成员 'position.'
在下一个函数调用中,我得到了与我原来的相反的错误,"Cannot invoke initialiser for type 'CGPoint' with an argument list of type '(vector_float2)'"
func agentDidUpdate(agent: GKAgent) {
guard let spriteComponent = entity?.componentForClass(SpriteComponent.self) else {
return
}
spriteComponent.node.position = CGPoint(position)
}
通过 CGPoint(位置)单击 CMD 将我带到 GKAgent2D。看来这两个 "positions" 是相互颠倒的。有什么想法可以解决这个问题吗?
如果您不想每次都编写转换代码,您可以使用这些扩展,然后您可以保留问题中的代码。
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))
}
}