Swift-значение типа 'SKNode' не имеет члена 'elementBirthRate' - PullRequest
0 голосов
/ 17 мая 2018

У меня есть сцена, где метеоры (SKSpriteNodes) падают с трассами (SKEmitterNodes). Каждый из этих метеоров имеет уникальное имя, которое соответствует названию его следа.

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

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

for child in children {
        if child.name == meteorite.name {
            child.particleBirthRate = 0 //Stops new particles from being created
            delay(2) {
                child.removeFromParent()
            }
        }
    }

Компилятор XCode возвращает:

У значения типа 'SKNode' нет члена 'elementBirthRate'

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

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Другой вариант - петля for с шаблоном case:

for case let emitter as SKEmitterNode in children {
    if emitter.name == meteorite.name {
        emitter.name.particleBirthRate = 0 
        // ...
    }
}

Тело цикла выполняется только для узлов типа SKEmitterNode.

Это может быть объединено с ограничением where:

for case let emitter as SKEmitterNode in children where emitter.name == meteorite.name {
    emitter.name.particleBirthRate = 0 
    // ...
}
0 голосов
/ 17 мая 2018

Вы можете использовать условное связывание. Примерно так:

for child in children where child.name == meteorite.name {
    if let emitter = child as? SKEmitterNode {
        emitter.particleBirthRate = 0 //Stops new particles from being created
        delay(2) {
            emitter.removeFromParent()
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...