簡體   English   中英

為什么我的 GKAgent2D 的 position 和 velocity nan?

[英]Why are my GKAgent2D's position and velocity nan?

在 SpriteKit 游戲中,我試圖使用 GameplayKit 來讓敵方角色追逐玩家,同時避開障礙物。

但是, agentDidUpdate(_:)中的agent具有 position 和速度nan

這是我現在正在做的:

  1. 配置障礙:
//node is defined here
let obstacle = GKCircleObstacle(radius: Float(node.size.width*0.5))
obstacle.position = vector_float2(x: Float(node.position.x), y: Float(node.position.y))
levelObstacles.append(obstacle)
  1. 為播放器SKSpriteNode配置GKEntity (等),保存對組件和代理的引用以供在#3 中使用:
//node is defined here
let entity1 = GKEntity()
heroAgent = GKAgent2D()
heroComponent = GKSKNodeComponent(node: node)
heroAgent.delegate = self // <-- self is a GKAgentDelegate
node.entity = entity1
heroEntity = entity1
if let comp = heroComponent {
    entity1.addComponent(comp)
    entity1.addComponent(heroAgent)
}
  1. 為敵人SKSpriteNode配置GKEntity (等),使用保存的英雄組件和代理設置必要的行為:
//node is defined here
let entity = GKEntity()
let agent = GKAgent2D()
let avoid = GKGoal(toAvoid: levelObstacles, maxPredictionTime: 5.0)
let pursue = GKGoal(toInterceptAgent: heroAgent, maxPredictionTime: 5.0)
nodeComponent = GKSKNodeComponent(node: node)
agent.behavior = GKBehavior(goals: [avoid, pursue], andWeights: [100.0, 50.0])
agent.delegate = self // <-- self is a GKAgentDelegate
node.entity = entity
if let comp = nodeComponent {
    entity.addComponent(comp)
    entity.addComponent(agent)
}
nodeEntity = entity
  1. SKSceneupdate(_:)方法中,調用敵人實體的update(deltaTime:)方法:
nodeEntity?.update(deltaTime: currentTime-lastFrameTime)
  1. agentDidUpdate(_:)中打印代理的 position 和速度:
func agentDidUpdate(_ agent: GKAgent) {
   if let a = agent as? GKAgent2D {
      print("agent position: \(a.position), agent velocity: \(a.velocity)") //Prints a position and velocity of "-nan"
   }
}

問題:為什么agent的position和velocity nanagentDidUpdate(_:)里面,怎么解決?

更新:這個問題顯然與GKGoal(toInterceptAgent:maxPredictionTime:)有關。 如果我使用不同的目標,例如GKGoal(toFleeAgent:) ,則agentDidUpdate(_:)中有可用的實際值。

我能夠通過在SKSceneupdate(_:)方法中將播放器代理的 position 設置為實際 SpriteKit 節點的 position 來實現這一點,如下所示:

heroAgent.position = vector_float2(x: Float(mainCharacter?.position.x ?? 0.0), y: Float(mainCharacter?.position.y ?? 0.0))

我不太確定為什么會這樣,但確實如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM