如何调整SKEmitterNode的大小?

Dav*_*man 5 uiviewcontroller uiview ios sprite-kit skemitternode

我只是想做一些对我来说似乎非常简单的事情,即将发射器放入视图的整个背景中...然后我希望视图能够进行纵向填充和缩放等等,允许发射器看起来不管我做了什么......

我不打算只缩放发射器.我希望对象保持正确的大小,但我希望发射器的区域改变...想象它像photoshop中的"画布大小"(没有调整大小)选项..

我会使用这种效果,例如,为整个场景添加雪或雨,或制作雪球精灵......

事实上,也许我只是没有找到正确的位置,但似乎SKEmitterNode上的任何大小属性都是只读的......我做错了什么?

这里是一些代码,其中生成的发射器只是视图中间的一个小矩形.

 override func viewDidLoad() {
    super.viewDidLoad()

    if let scene = GameScene(fileNamed:"GameScene") {
        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = true
        skView.showsNodeCount = true
        if let emitter = SKEmitterNode(fileNamed: "Bokeh") {
            emitter.position = view.center
            scene.addChild(emitter)
        }
        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill
        skView.presentScene(scene)
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要澄清一点.对于雪,我希望粒子在进入场景之前实例化,然后通过场景落下,并且只有在离开场景后才会死亡,而不是在整个场景中随机出现,然后继续倒下......我希望雪能占据场景的整个范围.

Whi*_*ind 8

你在寻找什么叫做particlePositionRange:

粒子位置的允许随机值范围.

您可以像这样更改它:

 emitterNode.particlePositionRange = CGVector(dx: dx, dy: dy)
Run Code Online (Sandbox Code Playgroud)

dx应该是发射器的宽度和dy高度.这可能是一个场景的大小(请注意,默认情况下,如果没有另外指定,场景的大小为1024x768).

通过更改"位置范围"部分中的值,您可以使用"粒子编辑器"执行相同的操作:

位置范围