Мой узел спрайта не будет отображаться в моей сцене - PullRequest
0 голосов
/ 15 июня 2019

Я создал SKScene и использовал addChild, чтобы поместить свой SKSpriteNode в сцену. Это указывает на то, что узел находится внизу справа, но спрайта не видно. Кажется, все выглядит правильно, но результатов нет. Мой scene.scaleMode - .aspectFill, я убедился, что SKSpriteNode (imageNamed: "GreenBlock") правильный. Я смотрел его так много раз, но для меня не имеет смысла, почему он не будет отображаться на экране ...

Это такая простая задача. Я видел, как другие делают то же самое, и это работает. Я перепробовал все, что мог придумать ...

My View Controller

import UIKit
import SpriteKit

class GreenSnakeController: UIViewController {

    override func loadView() {
        self.view = SKView()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        if let SKView = self.view as! SKView? {
            let scene = GameScene(size: view.bounds.size)

            SKView.ignoresSiblingOrder = true
            SKView.showsFPS = true
            SKView.showsNodeCount = true
            scene.scaleMode = .resizeFill
            SKView.presentScene(scene)
        }

        self.navigationController?.navigationBar.isHidden = true
    }

    override func viewDidAppear(_ animated: Bool) {
        navigationController?.navigationBar.barStyle = .black
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    override var prefersHomeIndicatorAutoHidden: Bool {
        return true
    }
}

Класс моей игровой сцены

import UIKit
import SpriteKit

class GameScene: SKScene {

    var snakeBlock: SKSpriteNode!

    override func didMove(to view: SKView) {
        layoutScene()
    }

    func layoutScene() {
        backgroundColor = #colorLiteral(red: 0.262745098, green: 0.262745098, blue: 0.262745098, alpha: 1)

        snakeBlock = SKSpriteNode(imageNamed: "GreenBlock")
        snakeBlock.size = CGSize(width: frame.size.width/8.0, height: frame.size.width/8.0)
        snakeBlock.position = CGPoint(x: frame.midX, y: frame.midY)
        addChild(snakeBlock)
    }
}

Я ожидаю, что что-то отобразится на экране, и хотя это указывает на наличие двух узлов, я не вижу ничего, кроме сцены, которая является первым узлом.

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Я не запустил этот проект как игровой проект, поэтому не было файла GameScene.sks и точка привязки сцены не была установлена ​​в центре вида. Для этого мне нужно было установить это в функции didMove в моем классе GameScene, например:

override func didMove(to view: SKView) {
        layoutScene()
        scene?.anchorPoint = CGPoint(x: 0.5, y: 0.5)
    }
0 голосов
/ 15 июня 2019
import UIKit
import SpriteKit

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if let view = self.view as! SKView? {
            // Load the SKScene from 'GameScene.sks'
            if let scene = SKScene(fileNamed: "GameScene") {
                // Set the scale mode to scale to fit the window
                scene.scaleMode = .aspectFill

                // Present the scene
                view.presentScene(scene)
            }

            view.ignoresSiblingOrder = true

            view.showsFPS = true
            view.showsNodeCount = true
        }

        self.navigationController?.navigationBar.isHidden = true
    }

    override var shouldAutorotate: Bool {
        return true
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        if UIDevice.current.userInterfaceIdiom == .phone {
            return .allButUpsideDown
        } else {
            return .all
        }
    }

    override var prefersStatusBarHidden: Bool {
        return true
    }


    override func loadView() {
        self.view = SKView()
    }


    override func viewDidAppear(_ animated: Bool) {
        navigationController?.navigationBar.barStyle = .black
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    override var prefersHomeIndicatorAutoHidden: Bool {
        return true
    }
}

Просто изменив рекомендованный Apple viewDidLoad(), он сработал для меня, когда я попробовал.Дайте мне знать, если это работает для вас

...