【问题标题】:How to resize an SKEmitterNode?如何调整 SKEmitterNode 的大小?
【发布时间】:2016-03-26 09:29:25
【问题描述】:

我只是想做一些对我来说似乎非常简单的事情,即在视图的整个背景中制作发射器......然后我希望视图能够进行填充和缩放等等,允许无论我做什么,发射器看起来都合适......

我不只是想缩放发射器。我希望对象保持正确的大小,但我希望发射器的区域发生变化......把它想象成 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)
    }
}

我需要再澄清一点。对于雪,我希望粒子在进入场景之前实例化,然后在场景中下落,在它们离开场景后才死亡,而不是随机出现在整个场景中,然后继续下落......我希望雪占据整个场景的边界。

【问题讨论】:

    标签: ios uiview uiviewcontroller sprite-kit skemitternode


    【解决方案1】:

    您要查找的内容称为particlePositionRange

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

    你可以这样改:

     emitterNode.particlePositionRange = CGVector(dx: dx, dy: dy)
    

    dx 应该是发射器的宽度,dy 应该是高度。所以这可能是场景的大小(请注意,如果未另行指定,场景的默认大小为 1024x768)。

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

    【讨论】:

    • 所以我将发射器定位在视图的中心,并将范围设置为宽度和高度?这听起来不是那么糟糕。 :-)
    • 这完全有效,知道和理解真是一种解脱 :-) 非常感谢!
    • 还有一个问题...对于雪,我如何使粒子最初只出现在视图上方,而不是在整个视图中随机出现?
    • @DaveKliman 你应该问一个不同的问题,因为那完全是另一个问题。 “在视图之上”或“在整个视图中”也是非常不清楚的陈述。发射器是场景的一部分,而不是视图的一部分。
    • 我注意到 zParticlePositionRange 属性,看起来很有趣。但它似乎已经贬值了。如果我想让一些雪出现在物体的前面,而另一些雪出现在物体的后面,zPosition 绝对有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多