我正在尝试使用 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];
所以我的问题是效果节点的混合模式似乎没有做任何事情。就像它卡在 alpha 混合模式或什么的。但是,如果我将 shouldRasterize 设置为 YES,则混合模式开始按预期工作。有人知道为什么吗?
还添加这样的全屏效果,带有效果节点,完全破坏了帧速率。特别是如果您开始移动效果节点(或每帧创建一个新节点)。但是我在 sprite kit 中看不到任何其他像这样的照明方式。我基本上想每帧创建一个光照遮罩,然后将其乘以场景的帧缓冲区。使用 Sprite Kit 可以实现这样的事情吗?或者我应该使用自定义着色器查看 Cocos2d 吗?