当我在屏幕上移动我的 SKEmitterNode 时,如何使 SKEmitter 粒子保持相对于背景?

Posted

技术标签:

【中文标题】当我在屏幕上移动我的 SKEmitterNode 时,如何使 SKEmitter 粒子保持相对于背景?【英文标题】:How to make SKEmitter particles stay relative to the background when I move my SKEmitterNode around the screen? 【发布时间】:2021-09-14 21:51:38 【问题描述】:

我觉得这应该是一个非常简单的问题,但我环顾四周,它似乎只是自动为每个人工作。但是由于某种原因,当我在屏幕周围移动粒子发射器时,粒子也随之移动,并且粒子发射器节点后面没有任何轨迹。

我正在制作一个角色在屏幕底部跑来跑去的 SpriteKit 游戏,他有一个助推能力,当他在水下进行助推时会在他身后释放小气泡颗粒。但粒子并没有相对于屏幕保持不变,它们是相对于玩家并与他一起移动的。

以下是一些添加增强气泡的代码:

func addBoostBubbles()
    boostBubbles = SKEmitterNode(fileNamed: "bubbleBoost")!
    boostBubbles.particlePositionRange = CGVector(dx: player.frame.size.width, dy: player.frame.size.height)
    boostBubbles.position = player.position
    boostBubbles.zPosition = 0
    self.addChild(boostBubbles)

我调用这个函数来创建发射器节点并将其设置到玩家的位置。

然后在 didSimulatePhysics 函数中移动气泡的位置我有这个:

boostBubbles.position.x += xAcceleration

我在屏幕上看到气泡,并且发射器节点正在移动到正确的位置,但我希望它们相对于背景,所以气泡会慢慢漂浮在玩家身后。

任何帮助将不胜感激!!!!

【问题讨论】:

【参考方案1】:

将发射器的targetNode 属性设置为背景节点。在addBoostBubbles 中,尝试添加以下行:

boostBubbles.targetNode = <background node name> 

https://developer.apple.com/documentation/spritekit/skemitternode

targetNode - 渲染发射器粒子的目标节点。

这会使粒子渲染为好像它们是背景的子级。

如果您没有后台节点,则需要添加一个。

【讨论】:

谢谢!这有效

以上是关于当我在屏幕上移动我的 SKEmitterNode 时,如何使 SKEmitter 粒子保持相对于背景?的主要内容,如果未能解决你的问题,请参考以下文章

在 SpriteKit 中使用 SKEmitterNode 和粒子创建轨迹

在移动设备上输入组附加错误(低分辨率屏幕)

当我单击按钮进入下一个屏幕时,移动 Android 应用程序崩溃

skemitternode 与 skspritenode 碰撞

iOS中的简单对象拖动

带有桌面站点视图的移动设备上元素的绝对高度和宽度为100%