В моей программе, я в настоящее время определить SKSpriteNode
как weak
в начале моего кода (в моем GameScene
классе) и объявить его как это:Swift 3 (SpriteKit): Стоп слабый SKSpriteNode стать ноль после инициализации
weak var tapFade: SKSpriteNode? = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10))
Однако, так как это weak
и не имеет текущих ссылок, он удаляется и становится nil
, прежде чем я требую его использования. Кроме того, в моей программе, я инициализацию weak SKLabelNode
так:
weak var tapToBegin: SKLabelNode? = SKLabelNode(text: "Tap to Begin")
и он не удаляется сразу, в отличие от SKSpriteNode
. То, как я достиг этого был перезагрузкой объявляя SKLabelNode
, прежде чем я использовать его как это:
tapToBegin = SKLabelNode(text: "Tap to Begin")
Это сделало SKLabelNode
не nil
, когда я хотел использовать его. Хотя, я попытался повторно объявить SKSpriteNode
с этим же подходом, и он все еще был nil
.
Примечание: Это где инициализацый и где мне нужно сначала использовать эти nodes
в моей программе:
class GameScene: SKScene, SKPhysicsContactDelegate {
//Initialisations are here
weak var tapFade: SKSpriteNode? = SKSpriteNode(color: UIColor.red, size: CGSize(width: 10, height: 10))
weak var tapToBegin: SKLabelNode? = SKLabelNode(text: "Tap to Begin")
override func didMove(to view: SKView) {
//I first use these nodes here
}
}
Есть ли способ, чтобы предотвратить SKSpriteNode
от немедленно быть де- инициализируется? Кроме того, почему SKSpriteNode
немедленно удаляется, а SKLabelNode
нет?
То, что вы указали, не имеет смысла. Также я попробовал ваш код и оба этикета, и спрайт немедленно освобождается. Поскольку ничто не удерживает эти узлы, они освобождаются, как только заканчивается 'didMove (toView:)'. В вашем коде есть что-то, что сохраняет эту метку. – Whirlwind
Прочтите мой комментарий на ответ @ Muffinman2497. –