0

情况

我正在使用 GKObstacleGraph 在以下地图上进行寻路: 在此处输入图像描述

橙色区域是障碍物 (GKPolygonObstacle),而紫色点和线是自定义放置的节点 (GKGraphNode2D) 及其各自的连接,实体可以使用它们来传送穿过障碍物。

一切正常,实体找到正确的路径: 在此处输入图像描述

目标

我认为在方法上是正确的是将紫色节点之间的成本设置为 0(因为它们是门户)。考虑到这一点,我首先将所有紫色节点子类化为 DoorGraphNodes:

import SpriteKit
import GameplayKit

class DoorGraphNode: GraphNode {

    var id: String!
    var floor: Int!
    var complement: DoorGraphNode!

    init(position: CGPoint, id: String, floor: Int) {
        self.id = id
        self.floor = floor
        let point = vector_float2(Float(position.x), Float(position.y))
        super.init(point: point)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func setComplement(doorNode: DoorGraphNode) {
        self.complement = doorNode
    }
}

然后,我将所有要添加到 GKObstaclesGraph 的 GKGraphNode2D 节点子类化为 GraphNode:

import SpriteKit
import GameplayKit

class GraphNode: GKGraphNode2D {

    override func cost(to node: GKGraphNode) -> Float {
        if let fromNode = self as? DoorGraphNode {
            if let toNode = node as? DoorGraphNode {
                if fromNode.complement == toNode {
                    return 0.0
                }
            }
        }
        return self.cost(to: node)
    }
}

这样,当我调用 barrierGraph.findPath(from: startNode, to: targetNode) 时,理论上 GameplayKit 应该在调用 costToNode: 两个连接(补)紫色(DoorGraphNode)节点之间的方法时收到 0.0。

问题

但在实践中,我得到一个 EXC_BAD_ACCESS 错误,控制台中没有详细信息: 在此处输入图像描述

我不认为我在逻辑上做错了什么。你知道为什么会这样吗?

4

1 回答 1

0

类中的第 22 行GraphNode正在调用自身。它应该调用它的父级。

return super.cost(to: node)
于 2017-01-07T09:05:46.647 回答