如何调整SKEmitterNode的大小?

5

我想做一件对我来说非常简单的事情,就是将发射器作为整个视图的背景...然后我希望视图能够aspectFill和缩放等操作,让发射器看起来无论我怎么做都合适...

我不只是想缩放发射器,我希望对象保持正确的大小,但我想改变发射器的区域...可以将其视为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)
    }
}

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

1个回答

10

你要找的东西叫做particlePositionRange

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

您可以按照以下方式进行更改:

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

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

您可以通过更改 位置范围 部分中的值,在粒子编辑器中完成相同的操作:

position range


所以我将发射器定位在视图中心,并将范围设置为宽度和高度?这听起来还不错。 :-) - Dave Kliman
太好了,这真的起作用了,而且知道和理解这一点非常令人宽慰 :-) 非常感谢! - Dave Kliman
我删除了关于zPositions和出现顺序的评论,因为似乎那不是你所询问的内容。顺便说一下,particleZPosition属性并没有被弃用。我指的是它,而不是实际上已经被弃用的particleZPositionRange - Whirlwind
@DaveKliman 关于你的编辑... 你想让雪从场景上方生成并下落吗?是从上面吗?如果是这样,只需将发射器放置在场景正上方(使用 self.frame.maxY),并将发射器位置范围更改为类似 dx = scene.size.widthdy = 10 的值。 - Whirlwind
让我们在聊天中继续这个讨论 - Dave Kliman
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接