Достичь «перетаскиваемого» эффекта SKEmitterNode программно (Swift) - PullRequest
0 голосов
/ 07 октября 2018

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

let bullet = SKSpriteNode(imageNamed: "bullet") // "bullet" is a blank png
// ...Bullet properties...
self.addChild(bullet)

var actionArray = [SKAction]() 
actionArray.append(SKAction.move(to: endPoint, duration: 1))
actionArray.append(SKAction.removeFromParent())

bullet.run(SKAction.sequence(actionArray))

let emitter = SKEmitterNode(fileNamed: "bulletEmitter.sks")
// ...Emitter node properties... (same position as bullet)    
self.addChild(emitter!)

var emitterActionArray = [SKAction]()         
emitterActionArray.append(SKAction.move(to: endPoint, duration: 1))
emitterActionArray.append(SKAction.removeFromParent())

emitter!.run(SKAction.sequence(emitterActionArray))

Как указано выше, излучатель следует за пулей и анимирует при движении.Тем не менее, его анимация не зависит от его скорости.В файле bulletEmitter.sks я могу перетащить свою мышь, и эмиттер оставит «след», откуда он пришел.См. Эти два изображения:

Emitter while stationary - this is how the emitter looks like when it is moving with the bullet

Вверху: Эмиттер в неподвижном состоянии - так выглядит эмитент, когда ондвижется с пулей

Trail left by 'dragging' the emitter - I would like the emitter to look like this while moving

Вверху: След, оставленный физическим «перетаскиванием» излучателя вфайл .sks - мне бы хотелось, чтобы при перемещении эмиттер выглядел следующим образом

Есть ли другой способ прикрепить эмиттер к пуле, чтобы он выглядел так, как видно на втором изображении при его движении?

Спасибо.

1 Ответ

0 голосов
/ 13 октября 2018

Поскольку пуля является SKSpriteNode, которая наследуется от SKNode, вы можете просто добавить излучатель в качестве дочернего элемента к пули, что не только даст вам эффект трейлинга, который вы ищете, но и спасет вас отнеобходимость дать эмитенту последовательность действий для соответствия пули.Он просто будет двигаться по той же дорожке, которую вы установили для пули.

(Если вы изменяете положение эмиттера для настройки желаемого эффекта, помните, что теперь он находится в системе координат родительского элемента, а не самой сцены.)

bullet.addChild(emitter)

...