Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift SpriteKit粒子发射器多图像_Swift_Sprite Kit_Skemitternode - Fatal编程技术网

Swift SpriteKit粒子发射器多图像

Swift SpriteKit粒子发射器多图像,swift,sprite-kit,skemitternode,Swift,Sprite Kit,Skemitternode,我正在尝试将SKSprite粒子发射器与Swift结合使用 但是我想在我的发射器中使用许多不同的纹理 是否可以:有许多图像,并且发射器随机使用这些图像,而不是只使用一个图像 谢谢假设您使用一种纹理设计发射器并将其保存为“original.sks”,并且您有一个名为纹理的纹理数组: var emitters:[SKEmitterNode] = [] for t in textures { let emitter = SKEmitterNode(fileNamed: "origin

我正在尝试将SKSprite粒子发射器与Swift结合使用

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

是否可以:有许多图像,并且发射器随机使用这些图像,而不是只使用一个图像


谢谢

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

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
子类,并将所有常用的发射器方法、操作和属性传播给子类…具体取决于您的需要。

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