• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 使用单个 SKShapeNode 渲染多个重叠多边形?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:32:12 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我发现可以使用单个 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap