2016-12-22 7 views
4

たとえば、SKShapeNodeを作成して、子を作成します(例は十字線とその2本の交差線です)。十字は親であり、交差する線は子です。親の子供のアルファ値をどのように変更できますか? は、現在だけで使用して:Swift 3(SpriteKit):すべての子に影響を与える親のアルファ値を変更する

parent.alpha = 0.5 

は、その子のアルファ値を変更しません。

誰かがこの問題を解決する方法や他の方法で解決できるシェーダを作成できる場合は、返信してください。 この投稿は私の前の投稿に対応しています:(Swift: Make translucent overlapping lines of the same color not change color when intersecting) 誰かがこの問題を解決できれば、半透明の線が交差する暗い場所を消そうとしています。

let nodeParent = SKShapeNode() 
let nodeOne = SKShapeNode(circleOfRadius: 5) 
let nodeTwo = SKShapeNode(circleOfRadius: 5) 

//Set the color of the circles, I'm not sure if this is the right way 
nodeOne.fillColor = UIColor.init(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0) 
nodeTwo.fillColor = UIColor.init(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0) 

nodeParent.addChild(nodeOne) 
nodeParent.addChild(nodeTwo) 
addChild(nodeParent) 

nodeParent.alpha = 0.5 

円の代わりにラインを使用している間、私は、問題のスクリーンショットをとっている:

おかげここ

は、一例として、いくつかのコードです。

+0

これは動作するはずです。子を持ち、子を持ち、子を持つ親ノードは、その親の透明度がすべての子に等しく影響します。すべての子が1.0の不透明度で、親が0.5に変更された場合、すべての子は0.5になります。子どもが0.5で生活を開始し、親が1.0であれば、親を0.5に変更すると子の不透明度は0.25に半分になります – Confused

+0

すべての子を親に1.0のアルファを付けて追加し、親のアルファを変更します何らかの理由でそれに影響を与えません。それは私が把握しようとしているものです。 –

+0

ああ、間違いなく、親と子の関係に間違いがあります。より多くのコードを表示できますか?これは本当にうまくいくはずです。 – Confused

答えて

3

これはSpriteKit blendModeの正しい動作と意図された動作です。これは主に、それ自体と同じものを無視するような類似のブレンドモードがないためです。

このように、順番に描画されるいくつかのノードの不透明度を下げると、ブレンド位置の下で累積結果が得られます。だからこそ、真ん中の明るい部分。

私の以前の質問に対する答えでは、クロスの両方の軸をテクスチャに「平坦化」し、そのテクスチャをSpriteNodeとしてロードすることで、累積的なレンダリングを避けていました。ひとこと。

完全な不透明度未満のこのような累積的な連続的なレンダリング効果を避けたいのであれば、最初にすべてのオブジェクト/線/図形を100%不透明度で「平坦化」し、次に不透明度の変更を適用する必要がありますアルファ効果を得る。

これは、最初の「回答」では、それが本当に大きな問題の解決策ではなく、望ましい結果を得るための方法であると言いました。

好きなようにレンダリングモードを無視すると、SpriteKitは完全な不透明度よりも小さいものに累積的な影響を与えることなくオーバーレイを行うことができません。

+0

私はちょうど誰かが他の回避策を持っていたかどうかを確認するためにこれについて別の意見を得ようとしていた。あなたが正しいとは思わない。テクスチャの問題は、それらが遅いことです。私は新しいものを1秒に数回作成します。 –

+0

@ J.Treutleinあなたが使用しているSKShapeNodesは、テクスチャではなくゲームを遅くするものです。 SpriteKitは、(アトラスを使用して)多くのテクスチャを効果的な方法でレンダリングできます。これは、SKShapeNodeでは言えません。レンダリングされるときに(少なくとも)1回の描画呼び出しが必要です。続きを読む[ここ](http://stackoverflow.com/a/31610775/3402095)または[ここ](http://stackoverflow.com/a/31699990/3402095)画面に50以上のSKShapeNodesがある場合重大なパフォーマンス上の問題が発生する可能性があります。ドキュメントで指摘されているように、それは控えめに使用する必要があります。 – Whirlwind

+0

@ J.Treutleinバッチレンダリングの詳細はこちら:http://stackoverflow.com/q/22851983/3402095(LearnCocos2Dの記事を参照)。 – Whirlwind

関連する問題