Вычитание blendmode в Spritekit дает неожиданные результаты - PullRequest
0 голосов
/ 03 января 2019

[РЕДАКТИРОВАТЬ: СЕЙЧАС РЕШЕНО! Ну, это смущает, оказывается, это просто ошибка симулятора. На устройстве работает абсолютно нормально. Хороший урок на будущее для меня! Я оставлю этот вопрос здесь на случай, если он кому-нибудь пригодится]

У меня есть два спрайта, которые я хочу наложить на стандартное альфа-смешение. Однако «передний» спрайт сам по себе получен из текстуры снимка дерева узлов, в котором используется вычитающее смешивание. Я бы не ожидал, что это изменится - вышедшая 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 будет смешиваться аддитивно с отверстием - это даже не демонстрирует нормальное альфа-смешение.

Может кто-нибудь помочь мне понять, что происходит?

Мэтт

...