所以我创建了一个游戏,我想为我的GKAgent
行为添加一些GKGoal
。xcode 8 beta 4中的GKBehaviour使gkagent的位置变得疯狂
因此经过数小时的战斗,我已经下载了下一个项目,这次是Apple Agents Catalog,在Xcode 7.3中它可以工作。我把它改写斯威夫特与GKGoal(toWander:)
创建基本的GKAgent这是我的代码:
class AAPLAgentNode: SKNode, GKAgentDelegate {
init(withScene scene:SKScene ,radius: Float, position:CGPoint) {
super.init()
self.position = position
self.zPosition = 10
scene.addChild(self)
agent = GKAgent2D()
agent.radius = radius
agent.position = vector2(Float(position.x), Float(position.y))
agent.delegate = self
agent.maxSpeed = 100
agent.maxAcceleration = 50
let circleShape = SKShapeNode(circleOfRadius: CGFloat(radius))
circleShape.lineWidth = 2.5
circleShape.fillColor = SKColor.gray
circleShape.zPosition = 1
self.addChild(circleShape)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func agentWillUpdate(_ agent: GKAgent) {
}
func agentDidUpdate(_ agent: GKAgent) {
self.position = CGPoint(x: Double(self.agent.position.x), y: Double(self.agent.position.y))
print("aaa == \(self.position)")
}
var agent: GKAgent2D!
}
当我添加到现场
let wanderer = AAPLAgentNode(withScene: self, radius: 100, position: CGPoint(x: 0, y: 0))
wanderer.agent.behavior = GKBehavior(goal: GKGoal(toWander: 10), weight: 100)
agentSystem.addComponent(wanderer.agent)
没有行为的立场是静态的,但是当我添加它,位置就会发疯,并在更新的每次迭代中,值是像
- 位置==(-10051366.0,251672512.0)
- 位置==(13 68370.0,259904576.0)
- 位置==(-131583.0,264841120.0)
难道仅仅是一个Xcode 8测试版的bug,还是我做错了什么。我花了很多时间试图解决它。 谢谢:)
我在iPad上用Swift Playgrounds 1.1.2获得了类似的行为(没有双关语意思),''x'的位置没问题,但''y总是变得毫无意义的巨大价值。 'GKGoal'实现中肯定存在一个错误。 –
我在Xcode 9中看到了相同的行为。只要您在作为SKNode组件的GKAgent2D上设置行为,代理的委托方法就会报告代理的疯狂位置。这使得GKGoal,GKBehaviour,GKAgent无法在SpriteKit中运行。有趣的是,我没有看到GKgent3D连接到SceneKit中的SCNNodes时的这种行为。可怕的是,一个像这样糟糕的bug通过两个版本的Xcode。 – OliverD
尽管在iOS 11上可以使用相同的代码。我只是看到了macOS Sierra上的不稳定行为(尚未更新到High Sierra)。如果它已在iOS 11中修复,那么它可能在High Sierra中得到修复? – OliverD