gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:54:34 24 4
gpt4 key购买 nike

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

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

最佳答案

如果您不关心边界,这里有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com