Xcode Playground - фон SKScene не отображается - PullRequest
0 голосов
/ 11 октября 2019

В течение последних нескольких часов я отчаянно пытался манипулировать этим фрагментом кода в Swift, чтобы показать фоновое изображение на своей игровой площадке.

Важно: я не владею этим кодом(источник: https://github.com/ralfebert/uikit-playground)

//: A UIKit based Playground for presenting user interface

import UIKit
import SpriteKit
import PlaygroundSupport

class CircleScene : SKScene {

    let circle = SKShapeNode(circleOfRadius: 20)

    override init() {
        super.init(size: CGSize.zero)
        self.backgroundColor = .clear
        self.scaleMode = .resizeFill
        self.circle.fillColor = .red
        self.circle.strokeColor = .clear
        self.addChild(circle)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func didMove(to view: SKView) {
        let background = SKSpriteNode(imageNamed: "Playground.jpg")
        background.position = CGPoint(x: 0, y: 0)
        background.size.width = self.size.width
        background.size.height = self.size.height
        background.anchorPoint = CGPoint(x: 0.5,y: 0.5)

        self.addChild(background)
    }

    override func didChangeSize(_ oldSize: CGSize) {
        circle.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let location = touches.first?.location(in: self) {
            nodeTapped(node: self.atPoint(location))
        }
    }

    func nodeTapped(node : SKNode) {
        if node === circle {
            circle.run(SKAction.sequence([
                SKAction.scale(by: 1.5, duration: 0.1),
                SKAction.scale(by: 1/1.4, duration: 0.2)
            ]))
        }
    }

}

class ViewController : UIViewController {

    override func loadView() {

        let view = SKView()
        view.presentScene(CircleScene())
        let label = UILabel()
        label.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
        label.text = "Hello World!"
        label.textColor = .black

        view.addSubview(label)
        self.view = view
    }

}

// Present the view controller in the Live View window
PlaygroundPage.current.liveView = ViewController()

Предложение didMove было взято из другого вопроса StackOverflow. Как вы можете видеть, этот код создает представление с базовым фоном. Благодаря свойству allowsTrasparency я былсмог сделать фон прозрачным, надеясь, что это решит проблему. Я также прояснил фон, но это не сработало.

В результате всегда черный экран (с красным шариком в центре, который немое изображение но SKNode istance). Что я пробовал:

  1. Установить allowsTransparency на true
  2. Установить backgroundColor на .clear
  3. Перемещение фонового кода в init функцию

Хочу отметить, что у меня 0 знаний о Swift API, и я пытался понять это благодаря документации и простому коду, который я нашел в Интернете.

Заранее спасибо.

...