使用固定相机的视差背景很容易做到,但由于我正在制作自上而下的2D空间探索游戏,我认为只有一个SKSpriteNode填充屏幕并成为我的SKCameraNode的孩子并使用SKShader画一个视差星场会更容易。
我继续使用shadertoy并找到了这个简单的着色器。我在shadertoy上成功地对它进行了调整,以接受一个vec2()来表示我想要作为SKAttribute传递的运动速度,以便它可以跟随我的船的移动。
以下是原始资料来源: https://www.shadertoy.com/view/XtjSDh
我设法转换原始代码,因此编译时没有任何错误,但屏幕上没有显示任何内容。我尝试了各个功能,他们确实可以生成固定的图像。
任何使其有效的指针?
谢谢!
答案 0 :(得分:1)
这不是一个真正的答案,但它比评论更多的信息,并突出了SK如何处理粒子的一些奇怪和适当性:
SceneKit中的粒子有几个奇怪的东西,可能适用于SpriteKit。
来自文档:
当发射器创建粒子时,它们将被渲染为子粒子 发射器节点。这意味着他们继承了这一特征 发射器节点,就像节点一样。例如,如果你旋转 发射器节点,所有产生的粒子的位置 也旋转了。取决于你用它模拟的效果 发射器,这可能不是正确的行为。
对于大多数应用程序,事实上这是错误的行为。但是对于你想要做的事情,这是理想的。您可以将新的SKNodeEmitters定位在船舶前进的位置,并将它们固定到“空间”,以便它们与玩家船舶的方向变化一起旋转,并且粒子将完全按照您的需要或需要创建移动的感觉整个空间。
这意味着当SKEmittors进入屏幕时,您可以通过太空准备好星星显示船驶向何处。建立星星不需要加载延迟,这是立即做到的。
尽可能接近我的想象,你需要一个3粒子发射器来拉断它,每个都是设备屏幕的大小。将粒子爆裂出来,然后将你想要视差的每一层释放到相机右侧“深度”的目标节点,然后根据屏幕移动移动这些目标。
有点凌乱,但可能比创建自己的系统更快,更容易,更有力地充满了有趣的效果。
也许......我错了。
答案 1 :(得分:1)
编辑:代码很干净,现在正在运行。我为此设置了一个GitHub回购。
我想我没有解释我想要的东西。我需要一个跟随相机的星空背景,就像你在Subspace中找到的那样(在日子里回来)
结果很酷且令人信服!稍后当节点数量成为瓶颈时,我可能会回到这里。我仍然相信这样做的正确方法是使用着色器!
这是我在GitHub上的代码的链接。我希望它对某人有用。它仍在进行中,但效果很好。回购中包含来自 SKTUtils (Ray Wenderlich的库,已经在github上免费提供)的源代码,以及我自己的扩展名为Ray的工具,我称之为 nuts-n-bolts < / em>的。这些只是每个人都应该发现有用的常见类型的扩展。当然,您拥有 StarfieldNode 和 InteractiveCameraNode 的源以及一个小型演示项目。