OGeek|极客世界-中国程序员成长平台

标题: ios - 使用单个 SKShapeNode 渲染多个重叠多边形? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 18:32
标题: ios - 使用单个 SKShapeNode 渲染多个重叠多边形?

我发现可以使用单个 SKShapeNode 对象渲染多个多边形:

class GameScene: SKScene {

    override func didMove(to view: SKView) {
        let polygons = [
            [
                CGPoint(x: 0, y: 0),
                CGPoint(x: 100, y: 100),
                CGPoint(x: 100, y: 0)
            ],
            [
                CGPoint(x: 50, y: 50),
                CGPoint(x: 50, y: 150),
                CGPoint(x: 150, y: 150),
                CGPoint(x: 150, y: 50),
            ],
        ]

        let path = CGMutablePath()

        for points in polygons {
            path.addLines(between: points)
            path.closeSubpath()
        }

        let node = SKShapeNode(path: path)
        node.fillColor = UIColor.red

        addChild(node)
    }
}

但是,多边形重叠的任何空间都将呈现为空:

enter image description here

是否可以在继续使用单个节点的同时填充这些空白?



Best Answer-推荐答案


如果您不关心边界,这里有一个 kluge 解决方法。

class GameScene: SKScene {

    override func didMove(to view: SKView) {
        let polygons = [
            [
                CGPoint(x: 0, y: 0),
                CGPoint(x: 100, y: 100),
                CGPoint(x: 100, y: 0)
            ],
            [
                CGPoint(x: 50, y: 50),
                CGPoint(x: 50, y: 150),
                CGPoint(x: 150, y: 150),
                CGPoint(x: 150, y: 50),

            ]
        ]

        let path = CGMutablePath()

        for points in polygons {
            path.addLines(between: points)
            path.closeSubpath()
        }

        let first = CGMutablePath()
        first.addLines(between: polygons[0]);
        first.closeSubpath()

        let second = CGMutablePath()
        second.addLines(between: polygons[1]);
        second.closeSubpath()

        let node = SKShapeNode(path: first)
        node.fillColor = .red
        node.strokeColor = .red

        let child = SKShapeNode(path: second)
        child.fillColor = .red
        child.strokeColor = .red
        node.addChild(child)


        addChild(node)
    }
}

如果你关心边框,那么......

class GameScene: SKScene {

    override func didMove(to view: SKView) {
        let polygons = [
            [
                CGPoint(x: 0, y: 0),
                CGPoint(x: 100, y: 100),
                CGPoint(x: 100, y: 0)
            ],
            [
                CGPoint(x: 50, y: 50),
                CGPoint(x: 50, y: 150),
                CGPoint(x: 150, y: 150),
                CGPoint(x: 150, y: 50),

            ]
        ]

        let path = CGMutablePath()

        for points in polygons {
            path.addLines(between: points)
            path.closeSubpath()
        }

        let first = CGMutablePath()
        first.addLines(between: polygons[0]);
        first.closeSubpath()

        let second = CGMutablePath()
        second.addLines(between: polygons[1]);
        second.closeSubpath()

        let node = SKShapeNode(path: first)
        node.fillColor = .red
        node.strokeColor = .white
        node.lineWidth = 2

        let child = SKShapeNode(path: second)
        child.fillColor = .red
        child.strokeColor = .white
        node.lineWidth = 2
        node.addChild(child)

        let child2 = SKShapeNode(path: first)
        child2.fillColor = .red
        child2.strokeColor = .clear
        node.lineWidth = 2
        node.addChild(child2)


        addChild(node)
    }
}

关于ios - 使用单个 SKShapeNode 渲染多个重叠多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41552735/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4