Swift 4 GKObstacle Graph, медленный - PullRequest
0 голосов
/ 11 сентября 2018

Итак, я пытался избегать построек в своей игре, недавно я узнал о GameplayKit и его использовании агентов, целей и т. Д., Которые могут пригодиться сейчас, однако это потребует большого количества изменений вмоя игра почти готоваЯ пытался использовать поиск пути, используя GamePlayKit, но, кажется, он запаздывает при поиске пути.Путь между PlayerBot и пользователем.

func IntiatePositionFollow(){
    followTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.test123), userInfo: nil, repeats: true  )
    followTimer?.fire()
}
@objc func test123(){
    let x1 = self.movetoPlayer?.position.x
    let y1 = self.movetoPlayer?.position.y
    let x2 = self.position.x
    let y2 = self.position.y
    let distance = (pow((x2-x1!),2)+pow((y2-y1!),2)).squareRoot()
    if distance >= 0 {
        let startNode = GKGraphNode2D(point: vector_float2(x: Float(self.position.x), y: Float(self.position.y)))
        let toNode = GKGraphNode2D(point: vector_float2(x: Float((movetoPlayer?.position.x)!), y: Float((movetoPlayer?.position.y)!)))
        graph.connectUsingObstacles(node: startNode)
        graph.connectUsingObstacles(node: toNode)

        if let nodes = graph.findPath(from: startNode, to: toNode) as? [GKGraphNode2D] {
            let path = CGMutablePath()
            path.move(to: self.position)
            for node in nodes {
                path.addLine(to: CGPoint(x: CGFloat(node.position.x), y: CGFloat(node.position.y)))
            }
            if self.hasActions(){
                self.removeAllActions()
            }
            let action = SKAction.follow(path
                , asOffset: false, orientToPath: true, duration: Double((distance/4) * 0.0166749312))
            self.run(action, completion: {()-> Void in
            }) 
        }
    }
}
...