Неустранимая ошибка, возникающая при попытке использования removeAllChildren () и removeAllActions () перед перезагрузкой SKScene - PullRequest
0 голосов
/ 28 августа 2018

это мой первый вопрос о переполнении стека, так что да .. В любом случае, я попытался создать кнопку «перезагрузки» для моей 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 полностью перезагрузиться (например, если это был первый раз, когда он работал)?

1 Ответ

0 голосов
/ 29 августа 2018
  1. проверьте тип возврата метода childNode (withName:), конечно, он не возвращает тип EDSpriteNodeButton, и вы принудительно приводите (как!) Его в тип EDSpriteNodeButton.
  2. Не насильственно приводите результат childNode (withName:), вместо этого ставьте охранник там.
...