【问题标题】:Controlling SKEmitterNode "area" size?控制 SKEmitterNode “区域”大小?
【发布时间】:2016-09-11 06:06:34
【问题描述】:

我正在学习 SpriteKit,特别是如何将 SKEmitterNode 效果应用于现有的 SKSpriteNode。

我在粒子编辑器中玩耍并制作了一个简单的“雨”粒子。然后我将它连接到我游戏中的现有精灵,如下所示:

let emitter = SKEmitterNode(fileNamed: "RainParticle.sks")
emitter?.targetNode = dogSprite
// dogSprite is just an SKSpriteNode
dogSprite.addChild(emitter!)

我得到的是这样的效果:

粒子效果按照我的预期应用,效果就是我想要的。我唯一希望改变的是粒子效果的“面积”。

狗的精灵大约是 60x50。我希望粒子效果在狗精灵的底部被“切断”。换句话说,我不希望粒子移动到狗精灵的“瓷砖”之外。

有没有办法通过改变发射器的属性来做到这一点,还是我必须从不同的角度来解决这个问题?非常感谢!

(以防万一有人注意到,这些艺术品都不是我的,也不是商业项目。我只是从网上抓了一些我喜欢的精灵来学习!我完全赞成遵守许可证。)

【问题讨论】:

    标签: sprite-kit skspritenode skemitternode


    【解决方案1】:

    你可以像这个例子一样简单地创建一个SKCropNode

    // initialize the SKCropNode
    let cropNodeDog = SKCropNode.init()
    
    // create the dog sprite and give a position
    let dogSprite = SKSpriteNode(imageNamed: "dogSprite.png")
    dogSprite.position = CGPoint(x: CGRectGetMidX(self.frame),y:CGRectGetMidY(self.frame))
    
    // create the SKEmitterNode and give a high zPosition
    emitter = SKEmitterNode(fileNamed: "RainParticle.sks")
    emitter.zPosition = 2
    
    // Define the SKCropNode mask and add elements to it
    cropNodeDog.maskNode = dogSprite
    cropNodeDog.addChild(dogSprite)
    cropNodeDog.addChild(emitter)
    
    //Finally add the SKCropNode to the scene
    addChild(cropNodeDog)
    

    您可以在Apple docs找到更多关于SKCropNode的详细信息。

    【讨论】:

    • 感谢您指出 SKCropNode - 它看起来像我想要的行为。但是,我尝试将它与您的示例类似,但发射器没有出现。
    • 尝试修正发射器和狗精灵的 zPositions
    • 看起来这实际上可能是iOS中的一个错误! openradar.me/22821166
    • 我已经用我的设备和 iOS 9.3.5 (Xcode 7.3.1) 测试了这段代码,它运行良好,但我没有尝试过 9.0。
    【解决方案2】:

    我想您将不得不在 xCode 粒子编辑器中进行一些设置。

    最有可能与此相关的值是

    1) 终身

    2) 位置范围 (y)

    如果您需要的话,您还可以更改粒子效果的比例。我在代码中这样做

    emitter.setScale(...)
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2011-09-02
      • 1970-01-01
      • 2011-12-19
      • 2020-05-19
      • 2014-02-16
      • 1970-01-01
      相关资源
      最近更新 更多