2016-08-04 52 views
2

所以我创建了一个游戏,我想为我的GKAgent行为添加一些GKGoalxcode 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,还是我做错了什么。我花了很多时间试图解决它。 谢谢:)

+0

我在iPad上用Swift Playgrounds 1.1.2获得了类似的行为(没有双关语意思),''x'的位置没问题,但''y总是变得毫无意义的巨大价值。 'GKGoal'实现中肯定存在一个错误。 –

+0

我在Xcode 9中看到了相同的行为。只要您在作为SKNode组件的GKAgent2D上设置行为,代理的委托方法就会报告代理的疯狂位置。这使得GKGoal,GKBehaviour,GKAgent无法在SpriteKit中运行。有趣的是,我没有看到GKgent3D连接到SceneKit中的SCNNodes时的这种行为。可怕的是,一个像这样糟糕的bug通过两个版本的Xcode。 – OliverD

+0

尽管在iOS 11上可以使用相同的代码。我只是看到了macOS Sierra上的不稳定行为(尚未更新到High Sierra)。如果它已在iOS 11中修复,那么它可能在High Sierra中得到修复? – OliverD

回答

1

它已经超沮丧试图格罗克......我是有在Xcode 9.0这个问题而尝试toSeekAgent当我将我的节点和代理,在我SKScene的didMove()方法这个代理行为的东西但在从touchesBegan()“启动”它们之后,极端位置问题就消失了。

+0

这也是发生在我身上的事情,所以我尝试了你的解决方案,它的工作原理。我不知道为什么它在didMove()中不起作用,但在touchesBegan()中起作用。 – thecanteen