[英]What is the difference between SKNode's position property and GKAgent2d's position property
[英]Why are my GKAgent2D's position and velocity nan?
在 SpriteKit 游戲中,我試圖使用 GameplayKit 來讓敵方角色追逐玩家,同時避開障礙物。
但是, agentDidUpdate(_:)
中的agent
具有 position 和速度nan
。
這是我現在正在做的:
//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)
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)
}
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
SKScene
的update(_:)
方法中,調用敵人實體的update(deltaTime:)
方法:nodeEntity?.update(deltaTime: currentTime-lastFrameTime)
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 nan
在agentDidUpdate(_:)
里面,怎么解決?
更新:這個問題顯然與GKGoal(toInterceptAgent:maxPredictionTime:)
有關。 如果我使用不同的目標,例如GKGoal(toFleeAgent:)
,則agentDidUpdate(_:)
中有可用的實際值。
我能夠通過在SKScene
的update(_:)
方法中將播放器代理的 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.