1

SKCropNode を使用するときは、cropNode に追加する画像で、対応するマスク ピクセルのアルファ値に従って個々のピクセルのアルファ値を調整する必要がありました。

多くの調査の後、画像ピクセルのアルファ値はマスクに適応しないという結論に達しましたが、プロジェクトを続行しただけで、特定のcropNode画像のピクセルが実際にはマスクピクセルにフェードしていることに気付きましたアルファ値??? それは素晴らしかったです!しかし、これを再現した後、なぜそれをしているのかわかりませんか?

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)

誰でもこの動作の原因を特定できますか、または目的の効果を得るより良い方法があるかどうかを確認できますか?

マスク:

ここに画像の説明を入力

結果:

ここに画像の説明を入力

削除する場合:

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

結果:

ここに画像の説明を入力

4

1 に答える 1

1

Crop ノードは、アルファが <.5 (オフ) と >=.5 (オン) の間で変化する場合にのみ、ピクセルのオンとオフを切り替えます。

ただし、フェードを適用するには、アルファ マスクが黒 (さまざまなアルファ レベル) で透明な場合は、マスクを通常のテクスチャとしてクロップ ノードに適用し、アルファ ブレンディングでフェード効果を処理します。

コードの問題に関しては、テクスチャをレンダリングするだけでなく、トリミング ノードがトリミングされていると確信していますか? これを再現しようとして、テクスチャがどのように見えるかわかりません。

トリミング ノードに提供されるノードは、別のノードの子であってはなりません。ただし、独自の子を持つ場合があります。

トリミング ノードのコンテンツがレンダリングされるとき、トリミング ノードは最初にそのマスクをプライベート バッファに描画します。次に、その子をレンダリングします。その子をレンダリングするとき、各ピクセルはマスク内の対応するピクセルに対して検証されます。マスク内のピクセルのアルファ値が 0.05 未満の場合、イメージ ピクセルはマスクされます。マスク ノードによってレンダリングされないピクセルは、自動的にマスクされます。 https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKCropNode_Ref/#//apple_ref/occ/instp/SKCropNode/maskNode

于 2016-05-07T12:54:00.850 に答える