Как бы я назвал сцену нажатием кнопки на быстрой площадке - PullRequest
0 голосов
/ 14 января 2020

как бы заставить эту кнопку открывать GameScene1 при нажатии? Пока это мой код.

class GameScene1: SKScene{
    override func didMove(to view: SKView){
    }
}
let scene1 = GameScene1(size: CGSize(width: 400, height: 640))
scene1.scaleMode = .aspectFill
scene1.backgroundColor = .blue

let view2 = SKView(frame: CGRect(x:0, y:0, width: scene1.size.width, height: scene1.size.height
view2.presentScene(scene)
PlaygroundPage.current.liveView = view2



class Receiver{
    @objc func buttonClicked(){
    }
}
let view1 = UIView()
let receiver = Receiver()
let button = UIButton(frame: CGRect(x:10, y:10, width:100, height:50))
button.setTitle("start", for: .normal)
button.addTarget(receiver, action: #selector(Receiver.buttonClicked), for: .touchUpInside)
view.addSubview(button)

Понятия не имею, как это сделать.

1 Ответ

0 голосов
/ 14 января 2020

Хорошо, у меня нет большого опыта работы с SKScene, но я бы так и сделал. Вам действительно нужен только один SKView на вашей игровой площадке, который вы можете хранить как static let внутри файла с переменными игры. Затем вы можете создать разные сцены, например одну для меню, одну для первого уровня, второго уровня и т. Д. c.

Следующий код создает кнопку и дает ей действие. Действие создает константу с именем scene, которая является сценой, к которой вы хотите перейти. Затем вы просто вызываете presentScene() со сценой и SKTransition, как показано ниже, который представляет собой просто 2,5-секундную скользящую анимацию справа.

Класс ButtonNode, который является просто узлом, который действует как Кнопка, которую вы можете добавить к вашей сцене.

class ButtonNode: SKSpriteNode {

    var action: ((ButtonNode) -> Void)?

    var isSelected: Bool = false {
        didSet {
            alpha = isSelected ? 0.8 : 1
        }
    }

    required init(coder: NSCoder) {
        fatalError("NSCoding not supported")
    }

    init(texture: SKTexture, size: CGSize) {
        super.init(texture: texture, color: SKColor.white, size: size)
        isUserInteractionEnabled = true
    }

    override func touchesBegan(with event: NSEvent) {
        action?(self)
    }

    override func mouseDown(with event: NSEvent) {
        action?(self)
    }
}

Создание кнопки и предоставление ей действия для перехода к следующей сцене. Это можно сделать в любом классе SKScene.

startButton = ButtonNode(texture: SKTexture(imageNamed: "start-button"), size: CGSize(width: 184, height: 72))
        startButton.position = CGPoint(x: 0.0, y: 0.0)
        startButton.action = { (button) in
            if let scene = IntroCutScene(fileNamed: "IntroCutScene") {
                // Set the scale mode to scale to fit the window
                self.scene!.scaleMode = .aspectFill

                // Present the scene
                GameVariables.sceneView.presentScene(scene, transition: SKTransition.moveIn(with: SKTransitionDirection.right, duration: 2.5))
            }
        }
        self.addChild(startButton)
...