Вычитание blendmode в Spritekit дает неожиданные результаты
[РЕДАКТИРОВАТЬ: СЕЙЧАС РЕШЕНО! Ну, это смущает, оказывается, это просто ошибка симулятора. На устройстве работает абсолютно нормально. Хороший урок на будущее для меня! Я оставлю этот вопрос здесь на случай, если он кому-нибудь пригодится]
У меня есть два спрайта, которые я хочу наложить на стандартное альфа-смешение. Однако "передний" спрайт сам по себе получен из текстуры снимка дерева узлов, в котором используется вычитающее смешивание. Я бы не ожидал, что это изменится - вышедшая SKTexture сглажена, не так ли? Так что, пока он используется для создания переднего спрайта, который использует нормальное альфа-смешение, я не ожидаю проблем. За исключением того, что ведет себя очень странно. Следующий код иллюстрирует это (это упрощенная версия моего кода). Предполагается, что код находится в классе SKScene
override func didMove(to view: SKView) {
backgroundColor = .black
let masterNode = SKNode()
let bground = SKShapeNode(circleOfRadius: 100)
bground.fillColor = .red
bground.position.x = -75
bground.zPosition = -1
bground.blendMode = .alpha
masterNode.addChild(bground)
let temp1 = SKShapeNode(circleOfRadius: 100)
temp1.fillColor = .lightGray
let temp2 = SKShapeNode(circleOfRadius: 50)
temp2.fillColor = .red
temp2.blendMode = .subtract
temp2.zPosition = 1
temp1.addChild(temp2)
let fground = SKSpriteNode(texture: SKView().texture(from: temp1))
fground.blendMode = .alpha
fground.zPosition = 5
masterNode.addChild(fground)
addChild(masterNode)
masterNode.position.x = UIScreen.main.bounds.width/2
masterNode.position.y = UIScreen.main.bounds.height/2
}
Я понимаю, что некоторые из этих строк не нужны, просто чтобы прояснить применяемый blendMode.
Я ожидаю, что голубая дыра вообще не смешивается с фоном, потому что голубая дыра должна иметь альфа-значения 1,0.
Отсюда следует, что я НЕ ожидаю, что фигура bground "покажет" отверстие, но это так.
Вот результат, который я получаю:
Красный круг под серым кругом с вычтенным отверстием
Кроме того, я определенно не ожидаю, что форма bground будет смешиваться аддитивно с отверстием - это даже не демонстрирует нормальное альфа-смешивание.
Может ли кто-нибудь помочь мне понять, что происходит?
Matt