это мой первый вопрос о переполнении стека, так что да .. В любом случае, я попытался создать кнопку «перезагрузки» для моей SKScene. Для этого я создал новый подкласс SKSpriteNode под названием «EDSpriteNodeButton». В этом файле подкласса я создал протокол, чтобы получить доступ к методу из моей сцены. Вот мой код протокола:
protocol EDSpriteNodeButtonDelegate: AnyObject {
func spriteNodeButtonPressed(_ button: EDSpriteNodeButton)
}
Затем я вернулся на сцену уровня и добавил своего собственного делегата ...
class Level1Scene: SKScene, SKPhysicsContactDelegate, EDSpriteNodeButtonDelegate {
Затем я установил класс моего SKSpriteNode (который я использую в качестве своей кнопки) в «EDSpriteNodeButton», сделал var
из моей кнопки, затем сделал его childNode и вызвал мой метод в нижней части моего класса .
var reloadSceneButton = EDSpriteNodeButton()
reloadSceneButton = self.childNode(withName: "reloadSceneButton") as! EDSpriteNodeButton
reloadSceneButton.isUserInteractionEnabled = true
reloadSceneButton.delegate = self
func reloadSceneRequested(_ button: EDSpriteNodeButton) {
self.removeAllChildren()
self.removeAllActions()
self.scaleMode = .aspectFill
self.scene?.view?.presentScene(self, transition: SKTransition.fade(withDuration: 1.0))
Но когда вызывается reloadSceneRequested()
, я получаю фатальную ошибку:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
.
Кто-нибудь знает, как заставить мою SKScene полностью перезагрузиться (например, если это был первый раз, когда он работал)?