Как изменить размер SKEmitterNode?

Я просто хотел сделать что-то, что мне кажется очень простым, а именно сделать эмиттер на весь фон представления... тогда я хотел бы, чтобы представление могло аспектировать, заполнять и масштабировать и т. д., позволяя эмиттеру выглядеть правильно что бы я не делал...

Я не собираюсь просто масштабировать эмиттер. Я хочу, чтобы объекты оставались правильного размера, но я хочу, чтобы область эмиттера менялась... думайте об этом как о параметре "размер холста" (без изменения размера) в фотошопе..

Я бы использовал этот эффект, например, чтобы добавить снег или дождь на всю сцену или сделать спрайт снежного шара...

Дело в том, что, возможно, я просто ищу не в том месте, но кажется, что любые свойства размера на 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)
    }
}

Мне нужно уточнить немного больше. Для снега я бы хотел, чтобы частицы создавались до того, как они войдут в сцену, а затем падают сквозь сцену и умирают только после того, как покинут сцену, а не случайным образом появляются по всей сцене, а затем продолжают падать... Я бы хотел, чтобы снег занимал все границы сцены.


person Dave Kliman    schedule 26.03.2016    source источник


Ответы (1)


То, что вы ищете, называется particlePositionRange :

Диапазон допустимых случайных значений положения частицы.

Вы можете изменить его следующим образом:

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

dx должна быть шириной вашего эмиттера, а dy - высотой. Таким образом, это может быть размер сцены (обратите внимание, что по умолчанию размер сцены составляет 1024x768, если не указано иное).

То же самое вы можете сделать с помощью редактора частиц, изменив значения в разделе Position Range:

диапазон позиций

person Whirlwind    schedule 26.03.2016
comment
поэтому я помещаю излучатель в центр представления и устанавливаю диапазон ширины и высоты? Звучит не так уж плохо. :-) - person Dave Kliman; 26.03.2016
comment
это полностью сработало, и это такое облегчение знать и понимать :-) большое спасибо! - person Dave Kliman; 26.03.2016
comment
еще один вопрос... для снега, как мне сделать так, чтобы частицы сначала появлялись только НАД видом, а не случайным образом по всему виду? - person Dave Kliman; 26.03.2016
comment
@DaveKliman Вы должны задать другой вопрос, потому что это совсем другая проблема. Также над видом или по всему виду есть довольно неясные утверждения. Излучатель является частью сцены, а не вида. - person Whirlwind; 26.03.2016
comment
я заметил свойство zParticlePositionRange, которое выглядит интересно. но, похоже, обесценился. zPosition определенно полезен, если я хочу, чтобы часть снега появлялась впереди, а другая часть снега появлялась позади объектов. - person Dave Kliman; 26.03.2016
comment
Я удалил свой комментарий о zPositions и порядке появления, потому что кажется, что это не то, о чем вы спрашивали. Кстати, свойство particleZPosition не устарело. Я имел в виду его, а не particleZPositionRange, который на самом деле устарел. - person Whirlwind; 26.03.2016
comment
@DaveKliman А насчет вашего редактирования ... Вы хотите, чтобы снег появлялся над сценой и падал вниз? Из вышесказанного, верно? Если это так, просто поместите эмиттер прямо над сценой (используйте self.frame.maxY) и измените диапазон положения эмиттера на что-то вроде dx = scene.size.width и dy = 10. - person Whirlwind; 26.03.2016
comment
Давайте продолжим обсуждение в чате. - person Dave Kliman; 26.03.2016