【问题标题】:SpriteKit Particle Emitter Multi ImageSpriteKit 粒子发射器多图像
【发布时间】:2016-03-03 10:16:06
【问题描述】:

我正在尝试将 SKSprite 粒子发射器与 Swift 一起使用。

但我想在我的发射器中使用许多不同的纹理。

是否有可能:拥有许多图像,并且发射器随机使用图像,而不是仅使用一张图像?

谢谢

【问题讨论】:

  • 如果我理解正确的话,不,你不能那样做。例如,您最多可以使用 SKAction 手动更改 texture (particleTexture),但这样做,新纹理将应用于所有现有粒子。我猜这不是你想要的......
  • 是的,我尝试手动更改纹理,当然它适用于所有粒子。但感谢您确认这是不可能的。我将尝试手动执行此操作。
  • 你可以做的就是在同一个位置有多个粒子发射器,这就是我处理“五彩纸屑”类型效果的方式
  • 这是旧的,您可以将 SKTexture 视为图集并让着色器选择纹理的部分
  • 有没有例子说明如何做到这一点?

标签: swift sprite-kit skemitternode


【解决方案1】:

假设您使用一个纹理设计了发射器并将其保存为“original.sks”,并且您有一个名为 textures 的纹理数组:

var emitters:[SKEmitterNode] = []
for t in textures {
    let emitter = SKEmitterNode(fileNamed: "original.sks")!
    emitter.particleTexture = t
    emitter.numParticlesToEmit /= CGFloat(emitters.count)
    emitter.particleBirthRate /= CGFloat(emitters.count)
    emitters.append(emitter)
}

现在您有了一个发射器阵列,而不是单个发射器。无论您对发射器做什么,只需使用数组即可:

// What you'd do with a single emitter:
addChild(someNormalEmitter)
someNormalEmitter.run(someAction)
...
    

// How to do the same with the array:
emitters.forEach {
    self.addChild($0)
    $0.run(someAction)
...
}

当然,您也可以将SKEmitterNode 子类化,使其包含其他SKEmitterNode 子级,并将所有常用的发射器方法、动作和属性传播给子级……这取决于您的需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多