2016-09-11 3 views
1

Я изучаю SpriteKit, в частности, как применить эффект SKEmitterNode к существующему SKSpriteNode.Контролировать размер SKEmitterNode "area"?

Я играл в редакторе частиц и делал простую «дождевую» частицу. Затем я подключил, что к существующему спрайт, в моей игре, как так:

let emitter = SKEmitterNode(fileNamed: "RainParticle.sks") 
emitter?.targetNode = dogSprite 
// dogSprite is just an SKSpriteNode 
dogSprite.addChild(emitter!) 

Что я получаю это эффект, который выглядит следующим образом:

enter image description here

Эффект частиц применяется как я хотел бы ожидать и эффект - это то, что я собираюсь сделать. Единственное, что я хочу изменить, это «площадь» эффекта частицы.

Собачий спрайт 60x50, примерно. Я бы хотел, чтобы эффект частиц был «обрезан» в нижней части собачьего спрайта. Другими словами, я не хочу, чтобы частицы выходили за пределы «плитки» собачьего спрайта.

Есть ли способ сделать это, изменив свойства на эмиттере или мне нужно решить эту проблему под другим углом? Спасибо!

(На всякий случай, когда кто-либо замечает, ни одно из этих работ не является моим, и это не коммерческий проект. Я просто захватил некоторые спрайты, которые мне нравились в Интернете, чтобы учиться! Я все для соблюдения лицензий.)

ответ

0

Я думаю, вам придется поиграть с некоторыми настройками в редакторе частиц xCode.

Значения, которые, скорее всего, иметь отношение этого являются

1) срок службы

2) PositionRange (у)

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

emitter.setScale(...) 

Надеется, что это помогает

1

Вы просто можете создать SKCropNode как в этом примере:

// initialize the SKCropNode 
let cropNodeDog = SKCropNode.init() 

// create the dog sprite and give a position 
let dogSprite = SKSpriteNode(imageNamed: "dogSprite.png") 
dogSprite.position = CGPoint(x: CGRectGetMidX(self.frame),y:CGRectGetMidY(self.frame)) 

// create the SKEmitterNode and give a high zPosition 
emitter = SKEmitterNode(fileNamed: "RainParticle.sks") 
emitter.zPosition = 2 

// Define the SKCropNode mask and add elements to it 
cropNodeDog.maskNode = dogSprite 
cropNodeDog.addChild(dogSprite) 
cropNodeDog.addChild(emitter) 

//Finally add the SKCropNode to the scene 
addChild(cropNodeDog) 

Вы можете найти более подробную информацию о SKCropNode в Apple docs.

+0

Спасибо за указание SKCropNode - это похоже на поведение, которое я хочу. Но я попытался подключить его аналогично вашему примеру, и эмиттер не появляется. – bitops

+1

Попытайтесь исправить zPositions для эмиттера и dogprite –

+0

похоже, что это может быть ошибка в iOS! http://www.openradar.me/22821166 – bitops