小编Mar*_*cus的帖子

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

我试图将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对象,而不是我的子类.

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

gamekit sprite-kit swift ios9

6
推荐指数
0
解决办法
234
查看次数

标签 统计

gamekit ×1

ios9 ×1

sprite-kit ×1

swift ×1