Добавление эмиттера частиц в проект FlappySwift

Сегодня я играл со Swift, я создал клон FlappyBird и внес несколько изменений, например, добавил обнаружение столкновений.

Я хотел бы, чтобы частицы испускались, когда птица попадает в трубу, поэтому я немного почитал и нашел класс SKEmitterNode. Однако вся документация находится на Objective-C, поэтому мне приходится переносить все это на Swift, поскольку в настоящее время в Интернете нет ничего о том, как использовать SpriteKit в Swift.

Вот как я пытаюсь создать излучатель

// sparkles and burstEmitter are defined as class variables
sparkles = SKTexture(imageNamed: "bird-01") //reusing the bird texture for now
burstEmitter = SKEmitterNode()
burstEmitter.particleTexture = sparkles
burstEmitter.position = CGPointMake(200, 200)
burstEmitter.particleBirthRate = 20
burstEmitter.numParticlesToEmit = 200;
self.addChild(burstEmitter)

Это выглядит правильно?

Когда я строю, я не вижу никаких частиц на экране.

Полный исходный код моего форка находится на github здесь - https://github.com/jolyonruss/FlappySwift

Спасибо за любую помощь


person jolyonruss    schedule 06.06.2014    source источник


Ответы (2)


Вы также можете использовать собственный редактор частиц Xcode 6 через файлы .sks.

Вот некоторый код, который я получил, работая в Swift, с дополнительным преимуществом возможности редактировать эффект частиц в XCode.

//spark particle effect

    let sparkEmmitterPath:NSString = NSBundle.mainBundle().pathForResource("sparkParticleEffect", ofType: "sks")

    let sparkEmmiter = NSKeyedUnarchiver.unarchiveObjectWithFile(sparkEmmitterPath) as SKEmitterNode

    sparkEmmiter.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2 - 200)
    sparkEmmiter.name = "sparkEmmitter"
    sparkEmmiter.zPosition = 1
    sparkEmmiter.targetNode = self

    self.addChild(sparkEmmiter)

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

person Chuck Gaffney    schedule 05.07.2014
comment
Спасибо за обновление @Chuck, как новичок в Objective-C, которое действительно имеет смысл, я думаю, это одно из преимуществ его многословия. - person jolyonruss; 07.07.2014
comment
Никаких проблем :-) Да, мне нравится возможность редактировать частицы в Xcode напрямую с помощью 6. В прошлом я использовал программу под названием PhysicsEditor, чтобы делать то же самое. Экономит время от необходимости вводить все эти свойства по отдельности в код. - person Chuck Gaffney; 08.07.2014
comment
Только что пришло мне в голову, что self.removeChild(sparkEmmitter) должен удалить эффект в этом случае. Конечно, вам придется повторно добавить его, чтобы он снова был включен. Я считаю, что есть также способ отключить его, не удаляя его полностью из сцены. Просто не уверен в этом на данный момент; это может сэкономить частоту кадров, поскольку не нужно перераспределять данные эффекта частиц. - person Chuck Gaffney; 29.09.2014

Итак, получается, что SKEmitterNode требует больше свойств, чтобы он работал, я добавил следующее, и у меня есть некоторые частицы, излучающие.

burstEmitter.particleLifetime = 3.0
burstEmitter.particleSpeed = 10.0
burstEmitter.xAcceleration = 100
burstEmitter.yAcceleration = 50
person jolyonruss    schedule 06.06.2014