我试图将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对象,而不是我的子类。
我错过了一些明显的东西吗?