Как изменить правило заполнения SKShapeNode при заполнении цвета - PullRequest
1 голос
/ 14 февраля 2020

Я использую SKShapeNode , чтобы создать элемент вида, который используется в моей игре, он должен быть похож на следующее изображение, только с 2 видимыми кривыми и цветом заливки внутри.

enter image description here

Вот мой код:

    override func sceneDidLoad() {

        let shapeNode = SKShapeNode()
        shapeNode.fillColor = .red
        shapeNode.strokeColor = .white
        shapeNode.lineWidth = 5

        let path = CGMutablePath()
        let radius:CGFloat = 250
        path.addArc(center: CGPoint(x:0, y:300), radius: radius, startAngle: CGFloat.pi*7/6, endAngle: CGFloat.pi*11/6, clockwise: false)
        path.addArc(center: CGPoint(x:0, y:-300), radius: radius, startAngle: CGFloat.pi*1/6, endAngle: CGFloat.pi*5/6, clockwise: false)

        shapeNode.path = path

        self.addChild(shapeNode)
    }

Но у меня есть дополнительная прямая линия, которая мне не нужна.

enter image description here

Итак, я попытался перейти к другому ar c напрямую

        path.addArc(center: CGPoint(x:0, y:300), radius: radius, startAngle: CGFloat.pi*7/6, endAngle: CGFloat.pi*11/6, clockwise: false)
        path.move(to: CGPoint(x:cos(CGFloat.pi/6)*radius, y: -300+sin(CGFloat.pi/6)*radius))
        path.addArc(center: CGPoint(x:0, y:-300), radius: radius, startAngle: CGFloat.pi*1/6, endAngle: CGFloat.pi*5/6, clockwise: false)

Я получил что-то подобное, чего тоже не хочу.

enter image description here

Я узнал, что могу изменить правило заполнения CAShapeLayer , используя CGPathFillRule после проверяя документы Apple, но я не знаю, как подключить SKShapeNode и CGPathFillRule .

Есть идеи по этому поводу?

1 Ответ

2 голосов
/ 14 февраля 2020

Я не думаю, что правило заполнения исправит ситуацию здесь. Вам нужен способ отделить участки границы, которые вы хотите обвести. Проще всего, вероятно, создать два узла формы, один из которых будет выполнен как в первом случае и заполнен, а второй - как второй случай и зачеркнут.

...