使用固定相机的视差背景很容易做到,但由于我正在制作一个自上而下的视图 2D 空间探索游戏,我认为有一个 SKSpriteNode 填充屏幕并作为我的 SKCameraNode 的子级并使用 SKShader 绘制一个视差星空会更容易。
我继续使用 Shaderoy,发现了这个看起来很简单的着色器。我在 Shaderoy 上成功地对其进行了调整,以接受 vec2() 作为运动速度,我希望将其作为 SKAttribute 传递,以便它可以跟随我的船的运动。
这是原始来源:https://www.shadertoy.com/view/XtjSDh https://www.shadertoy.com/view/XtjSDh
我设法对原始代码进行转换,使其编译时没有任何错误,但屏幕上没有显示任何内容。我尝试了各个功能,它们确实可以生成固定图像。
有什么指示可以让它发挥作用吗?
Thanks!
这并不是真正的答案,但它比评论提供了更多信息,并强调了 SK 如何处理粒子的一些奇怪之处和适当性:
SceneKit 中的粒子有一些奇怪的事情,可能也适用于 SpriteKit。
- 当您移动粒子系统时,您可以让粒子随之移动。这是默认行为:
来自文档:
当发射器创建粒子时,它们被渲染为
发射器节点。这意味着他们继承了
发射器节点,就像节点一样。例如,如果您旋转
发射器节点,所有生成粒子的位置是
也旋转。取决于您要模拟的效果
发射器,这可能不是正确的行为。
事实上,对于大多数应用程序来说,这是错误的行为。但对于你想做的事情来说,这是理想的。您可以将新的 SKNodeEmitters 放置在屏幕外飞船前进的位置,并将它们固定到“空间”,这样它们就会随着玩家飞船的方向变化而旋转,并且粒子将完全按照您想要/需要的方式来创建移动的感觉整个空间。
- SpriteKit 具有预构建或填充能力,以推进模拟的形式:https://developer.apple.com/reference/spritekit/skemitternode/1398027-advancesimulationtime https://developer.apple.com/reference/spritekit/skemitternode/1398027-advancesimulationtime
这意味着当 SKEmittors 出现在屏幕上时,您可以准备好星星来显示飞船驶向太空的任何地方。无需加载延迟即可构建星星,这会立即完成。
据我所知,您需要 3 个粒子发射器才能实现此目的,每个粒子发射器的大小与设备屏幕的大小相同。将粒子爆发出来,然后将您想要视差的每一层释放到距相机正确“深度”处的目标节点,然后根据屏幕移动移动这些目标来继续。
有点混乱,但可能比创建自己的系统更快、更容易、更强大,充满了有趣效果的潜力。
也许……我可能是错的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)