使用Alpha混合的SpriteKit快速全屏晕影/灯光

时间:2015-05-16 08:28:19

标签: ios swift sprite-kit fullscreen alphablending

我正在使用SpriteKit制作平台游戏。我希望达到这样的效果:只有玩家周围的区域被点亮,其他一切都会消失在黑暗中。想象一下像假光源或强烈的小插图。出于测试目的,我创建了以下代码:

let effect = SKEffectNode()
effect.zPosition = 100
effect.position = CGPoint(x: 0, y: 0)
effect.shouldRasterize = false
effect.blendMode = SKBlendMode.Multiply

let gray = SKSpriteNode()
gray.color = SKColor.grayColor()
gray.size = self.frame.size
gray.blendMode = SKBlendMode.Multiply
gray.position = CGPoint(x: 0, y: 0)

let shine = SKSpriteNode(imageNamed: "Shine")
shine.position = CGPoint(x: 0, y: 0)
shine.blendMode = SKBlendMode.Screen
shine.setScale(3.0)

effect.addChild(gray)
effect.addChild(shine)

self.world.addChild(effect)

这可以按预期工作,但对帧速率有一些影响。考虑到e可能会产生类似的影响。 G。地图上的火炬或其他光源,我预计帧速率会下降得更多。

接下来,我想让灯光闪烁,所以我在更新功能中为shine sprite分配了一个随机alpha值。这真的杀死了帧率,让它立即下降到大约4帧。

我已经了解了SKEffectNodes及其对帧速率的重大影响。有没有其他方法可以实现这种全屏阿尔法混合,即使有多个"灯光也可以相当快速地进行#34;

真的很感激任何建议。

1 个答案:

答案 0 :(得分:2)

这可能是用SKLightNode解决的吗?

https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKLightNode_Ref/index.html

这是一篇关于如何使用SKLightNode的文章:

http://www.ymc.ch/en/playing-with-ios-8-sprite-kit-and-sklightnode

希望对你有任何用处