我遇到了一個非常不尋常的問題 - 據我瞭解 - 迅速3.我創建一個SpriteKit iOS遊戲。問題出在SKSpriteNode
。我通過添加孩子以外的didMove範圍
var gameOverBackground : SKSpriteNode!
這正好位於類中創建節點。然後我初始化在didMove()
功能節點,像這樣
override func didMove(to view: SKView) {
gameOverBackground = SKSpriteNode.init(texture: SKTexture(image: #imageLiteral(resourceName: "UIbg")), size: CGSize(width: (self.scene?.size.width)!/1.5, height: (self.scene?.size.height)!/1.5))
gameOverBackground.position = CGPoint(x: 0, y: 0)
gameOverBackground.zPosition = 10
gameOverBackground.name = "GameOverBackground"
}
現在問題出現了,當我稍後再試並添加節點作爲孩子的場景。我的聯繫功能,像這樣
func didBegin(_ contact: SKPhysicsContact) {
if (contact with many nodes) {
self.addChild(self.gameOverBackground)
}
}
我不斷收到錯誤的節點等於nil
這樣做。我找到了一個解決方法,只需簡單地在didMove()
中添加子節點並隱藏它。然後在接觸發生時不要隱瞞;但我更爲好奇爲什麼這個問題正在發生,如果我做錯了什麼。
在此先感謝!
:SKSpriteNode'這裏你都隱含展開可選的,當你如果你使用這個接觸函數你的節點是零,所以節點等於零的錯誤被拋出,爲了擺脫這個,你應該聲明變量爲非可選像'var gameOverBackground = SKSpriteNode()'或者像這樣希望它是可選的'var gameOverBackground:SKSpriteNode? ='SKSpriteNode()'或簡單'var gameOverBackground:SKSpriteNode?'但在這種情況下,它仍然是零,但它不會崩潰 – 3stud1ant3
@ 3stud1ant3你的建議可能工作,但你的推理是錯誤的('!'只是告訴編譯器「程序員將確保這個值在使用時不爲零」,以允許他們在其他地方初始化它。問題是該節點爲零,儘管在didMove中初始化了 – Fluidity
@Fluidity感謝您的輸入,將會牢記在心 – 3stud1ant3