菜鸟教程小白 发表于 2022-12-11 18:32:12

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


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

<pre><code>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)
    }
}
</code></pre>

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

<p> <a href="/image/0T4sS.jpg" rel="noreferrer noopener nofollow"><img src="/image/0T4sS.jpg" alt="enter image description here"/></a> </p>

<p>是否可以在继续使用单个节点的同时填充这些空白?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果您不关心边界,这里有一个 kluge 解决方法。 </p>

<pre><code>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);
      first.closeSubpath()

      let second = CGMutablePath()
      second.addLines(between: polygons);
      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)
    }
}
</code></pre>

<p>如果你关心边框,那么...... </p>

<pre><code>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);
      first.closeSubpath()

      let second = CGMutablePath()
      second.addLines(between: polygons);
      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)
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用单个 SKShapeNode 渲染多个重叠多边形?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41552735/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41552735/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用单个 SKShapeNode 渲染多个重叠多边形?