永远不会调用GKGraphNode costToNode方法的子类

时间:2015-08-31 18:30:09

标签: swift sprite-kit gamekit ios9

我试图将GKGraphNode2D子类化为包括不同地形的不同惩罚(在costToNode方法中)。当我用新的子类数组创建一个新的GKGraph并在GKGraph上调用findPathFromNode时,它会完全忽略我的costToNode方法。

代码如下:

public class PenaltyGraphNode: GKGraphNode2D {

    public let penalty: Float

    init(position: CGPoint, penalty: Float) {
        self.penalty = penalty
        let point = vector_float2(Float(position.x), Float(position.y))
        super.init(point: point)
    }

    override public func costToNode(node: GKGraphNode) -> Float {

        guard let penaltyNode = node as? PenaltyGraphNode else { return super.costToNode(node) }

        return super.costToNode(node) * (1 + penaltyNode.penalty)
    }
}

我试图使用GKGraph(为简洁起见删除了节点):

let penaltyNodes: [PenaltyGraphNode] = [penaltyNode1, penaltyNode2, ...]

let graph = GKGraph(nodes: penaltyNodes)
let path = graph.findPathFromNode(startNode, toNode: endNode) as? [PenaltyGraphNode]

我的子类中的costToNode永远不会被调用,我确保我在图中创建并稍后添加到它的所有节点都是PenaltyGraphNodes,但它仍然不会调用costToNode。当我打印图形的节点属性时,它只显示为GKGraphNode2D对象,而不是我的子类。

我错过了一些明显的东西吗?

0 个答案:

没有答案