2016-06-11 7 views
0

Я пытаюсь поставить след дыма за мой космический корабль. У меня есть smoketrail, разработанный как emitterNode, но я не могу прикрепить излучателя к космическому кораблю.swift как добавить SKEmitterNode как след дыма за SKSpriteNode?

Я не могу понять, почему это не работает. То есть излучатель вообще не отображается на экране:

var spaceShip: SKSpriteNode? 
    spaceShip = SKSpriteNode(imageNamed: "ship1.png") 
    spaceShip!.position = CGPoint(x: Int(arc4random_uniform(UInt32(self.size.width))), y: Int(arc4random_uniform(UInt32(self.size.height)))) 

    let trailEmmiter = SKEmitterNode(fileNamed: "trailParticle.sks") 
    trailEmmiter!.name = "trailNode" 
    trailEmmiter!.position = CGPointMake(((plane?.size.width)!/2), ((plane?.size.height)!/2)) 
    trailEmmiter!.zPosition = 100 //much over everything else 
    spaceShip!.addChild(trailEmmiter!) 
    self.addChild(spaceShip!) 

но это работает. То есть он помещает мой след дыма в случайное положение на экране.

let trailEmmiter2 = SKEmitterNode(fileNamed: "trailParticle.sks") 
    trailEmmiter2!.name = "trailNode" 
    trailEmmiter2!.position = CGPoint(x: Int(arc4random_uniform(UInt32(self.size.width))), y: Int(arc4random_uniform(UInt32(self.size.height)))) 
    trailEmmiter2!.zPosition = 100 //much over everything else 
    self!.addChild(trailEmmiter2!) 

Как я могу поместить след дыма позади космического корабля?

+0

печати trailEmitter.position после этой строки: 'trailEmmiter .position = CGPointMake (((плоскость .size.width)/2), ((плоскость .size.height)' и!?!?! Вставьте результат здесь. Также обратите внимание, что вы не должны использовать принудительное разворачивание, как это. Это небезопасно. Вместо этого лучше используйте необязательную привязку. – Whirlwind

+0

@Whirlwind У меня есть три спрайта, поэтому 'print (" trailEmitter! .position: \ (trailEmitter !. position) ")' выполняется три раза со следующими результатами: trailEmitter! .position: (263.0, 213.0) trailEmitter! .position: (374.0, 155.0) trailEmitter! .position: (209.0, 74.0) – user594883

+0

Обратите внимание, что когда вы добавляете дочерний узел к его родительскому элементу, он будет добавлен в систему координат родителей. вы хотите установить местоположение своих эмитентов относительно своего родителя ... Просто для проверки установите CGZeroPoint для позиции эмиттеров. Это поместит их в точное положение, где находится их родитель. – Whirlwind

ответ

2

Сначала создайте глобальный объект SKEmitterNode! Для XCode 6

var sparkEmmiter:SKEmitterNode! 

Создание эмиттер узла Функция!

func addTrailToTwinkle(){ 
    let sparkEmmitterPath    = NSBundle.mainBundle().pathForResource("PierrePath", ofType: "sks")! 
    // PierrePath is the EmitterNode name! 
    sparkEmmiter      = NSKeyedUnarchiver.unarchiveObjectWithFile(sparkEmmitterPath) as SKEmitterNode 
    sparkEmmiter.position    = CGPointMake(15, -15.0) 
    sparkEmmiter.name     = "PierrePath" 
    sparkEmmiter.zPosition    = 22.0 
    sparkEmmiter.targetNode    = self.scene 
    ship.addChild(sparkEmmiter) 
    //Here ship is the Target node. where Trail Added. 
} 

Теперь используйте функцию addTrailToTwinkle(), чтобы создать след за кораблем. Когда хотите создать трейл.

addTrailToTwinkle() 

Здесь свойство излучателя узла!

Here Is the image of EmitterNode Properties