Любой способ подсчитать количество частиц, испускаемых SKEmitterNode, чтобы включить отслеживание координат

Итак, это моя ситуация.

У меня есть излучатели, появляющиеся в верхней части экрана и перемещающиеся в нижнюю часть экрана, и я пытаюсь получить изображение png, чтобы следовать за ними (для целей обнаружения попаданий)

Проблема в том, что мне нужно иметь живое обновление изображений PNG, чтобы отслеживать skemitternode, и, поскольку я создаю несколько экземпляров узла эмиттера, я не могу сделать их глобальными переменными (нужен новый локализованный набор для n экземпляров)

Итак, решение, которое я придумал, состоит в том, чтобы иметь цикл while, который продолжает обновлять PNG до координат узлов эмиттера. Условия цикла должны продолжаться, пока количество частиц меньше 500 (время жизни частиц, которое я установил).

У меня возникли проблемы с тем, чтобы изображение png оставалось на узле skemitter. Он всегда идет выше него или теряет отслеживание.

В настоящее время я использую:

while (particle < 5000) {
    enemySmoke.position = Enemy.position
    particle++
}

Где вражеский дым — это узел SKEmitter, перемещающийся по оси Y.

var action = SKAction.moveToY(SH-SH, duration: 10 - duration)
// Basically moving to bottom of screen faster with each spawn as I have 
// duration variable incrementing.

enemySmoke.runAction(SKAction.repeatActionForever(action))
Enemy.runAction(SKAction.repeatActionForever(action))

Как я могу заставить эмиттер и png оставаться друг на друге?


person James Callyway    schedule 04.06.2015    source источник
comment
Когда вы говорите «изображение PNG», вы имеете в виду SKSpriteNode?   -  person ABakerSmith    schedule 04.06.2015
comment
@ABakerSmith да точно   -  person James Callyway    schedule 04.06.2015
comment
Я все еще немного сбит с толку тем, чего вы пытаетесь достичь... Вы действительно хотите, чтобы SKSpriteNode следовал за SKEmitterNode?   -  person ABakerSmith    schedule 04.06.2015
comment
@ABakerSmith Да, мне это нужно, чтобы следовать   -  person James Callyway    schedule 04.06.2015


Ответы (1)


Чтобы SKEmitterNode «следовал» за SKSpriteNode, самое простое решение — сделать излучатель дочерним по отношению к SKSpriteNode и перемещать только SKSpriteNode. Например:

sprite.addChild(emitter)

На данный момент испущенные частицы будут добавлены к SKSpriteNode. Это не идеальное поведение, так как частицы будут двигаться с SKSpriteNode. Чтобы исправить это, вы должны установить targetNode из SKEmitterNode на SKScene:

emitter.targetNode = self // Assuming self is the SKScene.
person ABakerSmith    schedule 04.06.2015
comment
Почему-то до сих пор не следует. Это код, который я использую - person James Callyway; 05.06.2015
comment
self.addChild(Enemy) Enemy.addChild(enemySmoke) вражескийSmoke.targetNode = EnemyNode - person James Callyway; 05.06.2015
comment
где Enemy — это SKSprite, а вражеский дым — эмиттер. EnemyNode — это узел, созданный для вражеского SKSprite. - person James Callyway; 05.06.2015
comment
Также почему-то движения очень прерывистые. Любое решение, которое вы могли бы предложить? - person James Callyway; 05.06.2015
comment
Хм, я не уверен, почему эмиттер не движется вместе со спрайтом? Что происходит? Спрайт движется, а эмиттер нет? Что касается прерывистого движения, каков ваш fps? Возможно, у вас слишком много частиц на экране одновременно... - person ABakerSmith; 05.06.2015
comment
Теперь он движется вместе со спрайтом, но движение очень прерывистое. FPS в порядке › 60 - person James Callyway; 05.06.2015
comment
Что вы используете для перемещения SKSpriteNode? Используя метод, который я подробно описал выше, вы должны использовать только SKAction, запущенный SKSpriteNode. - person ABakerSmith; 05.06.2015
comment
Кажется, это работает потрясающе, когда обнаружение столкновений не задействовано. Когда я использую обнаружение столкновений с битовыми масками, это очень изменчиво. Не могли бы вы указать мне правильный способ реализовать это без этой изменчивости? - person James Callyway; 05.06.2015
comment
Я починил это. По умолчанию для гравитации было установлено значение true, что противоречило движению, которое я пытался выполнить. - person James Callyway; 05.06.2015
comment
Ааа, есть на что обратить внимание в будущем :) Я рад, что вы разобрались. Удачи тебе с твоим проектом! - person ABakerSmith; 05.06.2015