【发布时间】:2017-11-30 23:41:16
【问题描述】:
我想要一个精灵跟随玩家,我试图通过 GameplayKit 的 Pathfinding 来实现这一点。这是有效的,但有问题。我使用以下代码获取从敌人精灵到玩家精灵的路径:
func moveEnemy(to playerPos: CGPoint){
guard !moving else { return }
moving = true
let startNode = GKGraphNode2D(point: float2(Float(self.position.x), Float(self.position.y)))
let endNode = GKGraphNode2D(point: float2(Float(playerPos.x), Float(playerPos.y)))
PhysicsHelper.graph.connectUsingObstacles(node: startNode)
PhysicsHelper.graph.connectUsingObstacles(node: endNode)
let path = PhysicsHelper.graph.findPath(from: startNode, to: endNode)
guard path.count > 0 else{ return }
var actions = [SKAction]()
for node in path{
if let point2d = node as? GKGraphNode2D{
let point = CGPoint(x:CGFloat(point2d.position.x) , y:CGFloat(point2d.position.y))
let action = SKAction.move(to: point, duration: 1)
actions.append(action)
}
}
let seq = SKAction.sequence(actions)
self.run(seq) {
self.moving = false
}
}
这是在这个块中我的敌人的另一个函数中调用的:
case .follow:
if allowMovement{
if self.action(forKey: "Hurt") == nil{
// orientEnemy(to: playerPos)
moveEnemy(to: playerPos)
// animateWalk()
}
}
并且这个函数在我的GameScene的update函数中被调用在这个block中:
if enemy.checkCircularIntersection(player: player, node: enemy, radius: 40){
print("Enemy is close to player")
enemy.update(playerPos: player.position)
}
checkCircularIntersection 函数仅检查玩家是否靠近敌人。
我的问题是敌人跟随玩家,但是当玩家移动时,敌人会移动到玩家之前站立的位置,然后停止一秒钟,然后再次移动到玩家站立的位置。但是玩家已经被移走了。
有没有办法让敌人永远跟随玩家,不停地避开障碍物?
【问题讨论】:
标签: swift sprite-kit path-finding gameplay-kit