我试图将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)
}
}
Run Code Online (Sandbox Code Playgroud)
我试图使用GKGraph(为了简洁起见删除了节点创建):
let penaltyNodes: [PenaltyGraphNode] = [penaltyNode1, penaltyNode2, ...]
let graph = GKGraph(nodes: penaltyNodes)
let path = graph.findPathFromNode(startNode, toNode: endNode) as? [PenaltyGraphNode]
Run Code Online (Sandbox Code Playgroud)
我的子类中的costToNode永远不会被调用,我确保我在图中创建并稍后添加到它的所有节点都是PenaltyGraphNodes,但它仍然不会调用costToNode.当我打印图形的nodes属性时,它只显示为GKGraphNode2D对象,而不是我的子类.
我错过了一些明显的东西吗?