SpriteKit Swift: SKView возвращается ноль - PullRequest
0 голосов
/ 26 мая 2018

Я делаю игру, используя спрайткит.Я использую джойстик в своей игре, который объявлен в отдельном классе SKNode, называемом «джойстик».

В этом классе я добавляю UIGesturerecongiser к представлению из класса.В методе конструктора одним из параметров является SKView, который передается со сцены игры.

Метод конструктора в классе джойстиков:

 init(colour: UIColor, position: CGPoint, skView: SKView) {
    //constructor method
    self.colour = colour;
    self.parentposition = position;
    self.view = skView;

    super.init();

    //setup properties
    //user interaction is needed to allow touches to be detected
    self.isUserInteractionEnabled = true;
    //setup
    setup();
}

В игровой сцене я инициализирую класс следующим образом:

class GameScene: SKScene {

     func setupJoyStick() {
        let joystick1 = Joystick(colour: UIColor.red, position: CGPoint(x: screenwidth / 3, y: screenwidth / 10 * 1.5), skView: self.view!)
        self.addChild(joystick1)
    }
}

Ошибка:

Когда я запускаю свое приложение, я получаю сообщение об ошибке, потому что «self.view» возвращает ноль, а также потому, что его принудительно разворачивают, это приводит к фатальной ошибке.

Где определяется вид:

if let scene = GKScene(fileNamed: "GameScene") {

        // Get the SKScene from the loaded GKScene
        if let sceneNode = scene.rootNode as! GameScene? {

            // Copy gameplay related content over to the scene
            sceneNode.entities = scene.entities
            sceneNode.graphs = scene.graphs

            // Set the scale mode to scale to fit the window
            sceneNode.scaleMode = .aspectFill
            sceneNode.size = view.bounds.size
            // Present the scene
            if let view = self.view as! SKView? {

                view.presentScene(sceneNode)

                view.ignoresSiblingOrder = true

                view.showsFPS = true
                view.showsNodeCount = true
            }
        }
    }

Дополнительная информация:

Я использую:

  • Xcode 9.2
  • Swift 4
  • Sprite Kit

Я тестирую его на:

  • Iphone 6s
  • Последняя версия IOS (не бета), последняя публичная версия.

Может кто-нибудь объяснить, почему это происходит и как решить эту проблему.

Заранее спасибо, любыебыла бы признательна за помощь.

1 Ответ

0 голосов
/ 26 мая 2018

Похоже, вы пытаетесь получить view свойство SKScene, но оно равно нулю.Это потому, что вы не представили SKScene.

К сожалению, я не работал с SpriteKit, но вы можете найти информацию о view property здесь и о SKScene здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...