我正在尝试对 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 永远不会被调用,我确保我在图中创建并稍后添加到其中的所有节点都是 PenaltyGraphNode,但它仍然不会调用 costToNode。当我打印图形的节点属性时,它仅将它们显示为 GKGraphNode2D 对象,而不是我的子类。
我在这里遗漏了一些明显的东西吗?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)