В настоящее время я нарисовал на экране 2 линии одного цвета, но обе имеют альфа-значение меньше 1. Когда эти линии пересекаются, цвет пересечения отличается от цвета остальных линий. Предыдущее сообщение было посвящено той же проблеме: ">быстрое рисование полупрозрачных линий, как сделать так, чтобы перекрывающиеся части не становились темнее? Однако на этот пост не было дано достаточного ответа. В настоящее время я рисую линии следующим образом:
var points = [CGPoint]()
points = [CGPoint(x: -100, y: 100), CGPoint(x: 100, y: -100)]
let FirstLine = SKShapeNode(points: &points, count: points.count)
FirstLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 0.5)
FirstLine.lineWidth = 30
addChild(FirstLine)
points = [CGPoint(x: 100, y: 100), CGPoint(x: -100, y: -100)]
let SecondLine = SKShapeNode(points: &points, count: points.count)
SecondLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 0.5)
SecondLine.lineWidth = 30
addChild(SecondLine)
Я понимаю, почему это происходит, но есть ли способ сделать перекресток таким же, чтобы он выглядел намного лучше?
Изменить: я решил реализовать ответ @Confused. Однако теперь проблема в том, что текстура всегда центрируется по центру экрана. Вот пример:
Красный крест находится в правильном положении, поскольку он соединяет указанные точки вместе. Однако, как только я делаю красный крест текстурой, он всегда центрируется посередине экрана (зеленый крест — это красный крест как текстура). Могу ли я использовать любой код, который мог бы переместить текстуру в правильное положение. Примечание: этот код не может работать только для этого примера, мне нужен код, который работает все время, независимо от положения красного креста.
ПОСЛЕДНИЕ РЕДАКТИРОВАНИЯ ДЛЯ ЛЮДЕЙ С ТАКОЙ ПРОБЛЕМОЙ
Сначала настройте все так:
var points = [CGPoint]()
let crossParent = SKNode()
addChild(crossParent)
Обратите внимание, ЧТО ВЫ ДОЛЖНЫ создать родительский SKNode для текстуры, иначе все на экране станет текстурой, а не только тем узлом, который вам нужен. Затем добавьте этот родительский узел в сцену.
После этого создайте нужные линии (в данном случае зеленый крестик):
//The first line of the green cross
points = [CGPoint(x: -300, y: 300), CGPoint(x: -100, y: 100)]
let FirstLine = SKShapeNode(points: &points, count: points.count)
FirstLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 1.0)
FirstLine.lineWidth = 30
crossParent.addChild(FirstLine)
Помните, что нужно НЕ добавлять первую созданную вами строку в сцену, а скорее в родительский SKNode, который вы создали в начале. Кроме того, установите альфа-значение на 1,0 для каждой линии, которую вы рисуете. Затем добавьте другие строки:
//The second line of the green cross
points = [CGPoint(x: -100, y: 300), CGPoint(x: -300, y: 100)]
let SecondLine = SKShapeNode(points: &points, count: points.count)
SecondLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 1.0)
SecondLine.lineWidth = 30
FirstLine.addChild(SecondLine)
Обратите внимание, что вы ДОЛЖНЫ добавить эту строку в первую строку, а не в сцену. Если вы добавляете более одной строки после добавления первой строки, добавьте ее в первую строку, как я сделал здесь, для каждой последовательной строки, которую вы добавляете.
Теперь создайте текстуру следующим образом:
let tex = view?.texture(from: FirstLine)
let cross = SKSpriteNode(texture: tex, color: .clear, size: (tex?.size())!)
cross.alpha = 0.5
addChild(cross)
После этого все, что вы назовете перекрестием, станет вашей текстурой, и вы можете изменить значение альфа-канала, как я сделал здесь, на все, что вам нравится, и изображение не будет иметь разные цвета. Не забудьте затем добавить эту текстуру к сцене.
Наконец, вы можете заметить, что текстура находится не в том положении, в котором вы изначально разместили точки. Вы можете вернуть его в то же положение следующим образом:
cross.position = CGPoint(x: (FirstLine.frame.midX), y: (FirstLine.frame.midY))
Надеюсь, это поможет :) Спасибо @Confused за текстурную часть программы :D