У вас есть как минимум четыре варианта, 2 из которых предложили комментарии.
Так как это игра с астероидами, я бы вообще не стал "здороваться". Что бы я сделал в вашем случае, это наследование детей от SKSpriteNodes.
Ваша иерархия должна выглядеть так:
Biggest asteroid - zPosition = 5
|
-- Bigger asteroid - zPosition = 4
| |
| -- Big asteroid - zPosition = 3
| | |
| | -- Small asteroid - zPosition = 2
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | |
| | -- Small asteroid - zPosition = 2
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| |
| -- Big asteroid - zPosition = 3
| | |
| | -- Small asteroid - zPosition = 2
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | |
| | -- Small asteroid - zPosition = 2
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| |
| -- Big asteroid - zPosition = 3
| | |
| | -- Small asteroid - zPosition = 2
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | |
| | -- Small asteroid - zPosition = 2
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | |
| | | -- Smaller asteroid - zPosition = 1
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
| | | | |
| | | | -- Smallest asteroid - zPosition = 0
Все эти астероиды будут в положении (0,0), за исключением узла в самой высокой позиции z.
Затем, во время вашей игры, когда стреляют в ваш самый большой астероид, у вас есть метод, который берет своих непосредственных детей (как у не внуков) и убирает их с астероида на сцену. Затем вы применяете свой код, который заставляет их проецироваться в разных направлениях в зависимости от того, как попала пуля.
Каждый раз, когда снимается астероид, вы перемещаете детей на сцену и убираете родителя.
В конце концов вы попадете на самый крошечный астероид, у которого нет детей, тем самым уничтожив весь астероид.
Этот метод будет немного дороже в оперативной памяти, но вам не нужно беспокоиться о потере циклов ЦП, постоянно создающих новые объекты.
Еще одна вещь, которую вы могли бы сделать это подкласс SKSpriteNode, чтобы дать каждому классу.
class Rocks : SKSpriteNode{
var health = 0
convenience init(health:Int){
self.init(imageNamed:"rock")
self.health = health
}
}
Еще одна вещь, которую вы можете сделать, это добавить здоровье к данным пользователя:
let userData = rock.userData ?? [:]()
userData["health"] = 2
rock.userData = userData
....
if let health = rock.userData["health"]{
health -= 1
rock.userData["health"] = 1
}
Наконец, вы можете использовать GamePlayKit и добавить компонент здоровья:
class HealthComponent : GKComponent{
var health = 2
}
....
var healthComponent = new HealthComponent()
rock.entity.addComponent(healthComponent)
....
if let healthComponent = rock.entity.component(ofType:HealthComponent){
healthComponent.health -= 1
}