0

SKEffectnode を使用して、横スクロール ゲームで簡単な照明を実行しようとしています。まず、グレーのフルスクリーン スプライト ノードを作成し、ブレンド モードを加算に設定して、エフェクト ノードの子として追加します。次に、軽いテクスチャを持つスプライト ノードをエフェクト ノードの子として追加します。最後に、エフェクト ノードのブレンド モードを乗算に設定し、子ノードとしてシーンに追加します。このようなもの:

SKEffectNode *effectNode = [[SKEffectNode alloc] init];
SKSpriteNode *overlay = [SKSpriteNode spriteNodeWithColor: [SKColor grayColor] size: [self.size];
SKSpriteNode *light = [SKSpriteNode spriteNodeWithImageNamed: @"LightTexture.png"];
[overlay setBlendMode: SKBlendModeAdd];
[light setBlendMode: SKBlendModeAdd];
[effectNode addChild: overlay];
[effectNode addChild: light];
[effectNode setBlendMode: SKBlendModeMultiply];
[self addChild: effectNode];

したがって、私の問題は、エフェクト ノードのブレンド モードが何もしていないように見えることです。アルファブレンドモードか何かで動かなくなったように。ただし、shouldRasterize を YES に設定すると、ブレンド モードが期待どおりに機能し始めます。これがなぜなのか誰か知っていますか?

また、エフェクト ノードを使用してこのようなフルスクリーン エフェクトを追加すると、フレーム レートが完全に破壊されます。特に、エフェクト ノードの移動を開始した場合 (またはフレームごとに新しいノードを作成した場合)。しかし、スプライト キットでこのような照明を行う方法は他にありません。私は基本的にフレームごとにライティング マスクを作成し、それをシーンのフレーム バッファーに乗算したいと考えています。スプライト キットを使用してこのようなことは可能ですか? または、カスタム シェーダーを使用して Cocos2d を調べる必要がありますか?

4

0 に答える 0