2016-05-07 13 views
0

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

После многих исследований я пришел к выводу, что значения альфа-изображений изображения не собираются приспосабливаться к маске, однако после того, как я продолжил свой проект, я заметил, что один пиксель изображения определенного типа был фактически затухающим к значению альфа-пикселя маски ??? Это было здорово! Однако, после воспроизведения этого, я не знаю, почему он это делает?

import SpriteKit 

var textureArray: [SKTexture] = [] 
var display: SKSpriteNode! 

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 

    anchorPoint = CGPointMake(0.5, 0.5) 
    backgroundColor = UIColor.greenColor() 

    fetchTexures() 

    display = SKSpriteNode() 

    let image = SKSpriteNode(texture: textureArray[0]) 
    display.addChild(image) 

    let randomCropNode = SKCropNode() 
    display.addChild(randomCropNode) 

    let cropNode = SKCropNode() 
    cropNode.maskNode = display 

    let fill = SKSpriteNode(color: UIColor.whiteColor(), size: frame.size) 
    cropNode.addChild(fill) 

    cropNode.zPosition = 10 

    addChild(cropNode) 


} 

func fetchTexures() { 

    var x: Int = 0 

    while x < 1 { 

     let texture: SKTexture = SKTextureAtlas(named: "texture").textureNamed("\(x)") 
     textureArray.append(texture) 

     x += 1 

     } 
    } 

} 

Приведенный выше код дает мне мой желаемый эффект, однако, если вы удалите ниже, значения альфа пикселей изображения больше не регулировать в соответствии с маской ?? Этот код на самом деле не используется в моем проекте, но это единственный способ настроить значение альфа-пикселя.

let randomCropNode = SKCropNode() 
display.addChild(randomCropNode) 

Может ли кто-нибудь увидеть, что вызывает это поведение, или если есть лучший способ получить желаемый эффект?

Маска:

enter image description here

Результат:

enter image description here

Если удалить:

let randomCropNode = SKCropNode() 
display.addChild(randomCropNode) 

Результат:

enter image description here

ответ

0

узел зерна будет только включать и выключать пикселей, если альфа колеблется в пределах < 0,5 (выключен) и> =. 5 (на)

Однако применять замирание, если альфа-маска просто черный (с различными уровнями альфа) и прозрачный, вы применяете маску в качестве обычной текстуры к вашему узлу обрезки, и вы позволяете альфа-смешиванию следить за эффектом затухания.

Что касается ваших проблем с кодом, уверены ли вы, что ваш обрезной узел обрезается, а не только рендеринг текстуры? Я не знаю, как выглядит текстура, чтобы попытаться воспроизвести это.

Узел, поставляемый узлу обрезки, не должен быть дочерним элементом другого узла ; однако у него могут быть свои дети.

Когда содержимое узла обрезки отображается, узел обрезки сначала рисует свою маску в частный буфер. Затем он делает своих детей. Когда рендеринг его детей, каждый пиксель проверяется на соответствующий пиксель в маске. Если пиксель в маске имеет значение альфа менее 0,05, пиксель изображения маскируется. Любой пиксель, а не , отображаемый узлом маски, автоматически маскируется. https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKCropNode_Ref/#//apple_ref/occ/instp/SKCropNode/maskNode

+0

Поведение Я получаю это на самом деле приспосабливается к пиксельный альфа-значение, если моя маска пиксель альфа-значение 0,25, мое изображение пиксель альфа-значение будет идти до 0,25, в то время как раньше, если значение маски было 0,25, значение изображения будет 1,0.Когда я добавляю randomCropNode, я получаю свой желаемый эффект, но из того, что Ive читает в Интернете, пиксели изображения не должны приспосабливаться к маске. Извините, это, вероятно, не имеет смысла. В основном, я хочу, чтобы пиксели настраивались на маску, но я не уверен, почему она делает это только в этом экземпляре. – Jarron

+0

Как я уже сказал, это может быть просто отрисовка вашей маски как обычной текстуры, а не фактическая маска. – Knight0fDragon

+0

Извините, я понял, что вы говорите, но нет, это не так. Я приложу изображение в ближайшее время. Изображение состоит из четырех оттенков черного, а затем я добавляю белую заливку, и она превращается в 4 оттенка белого. – Jarron