How to transition scenes in Swift

后端 未结 2 771
余生分开走
余生分开走 2020-12-05 19:26

In Objective-C, using Sprite-Kit, I would successfully use something like the following code in Objective-C to bring up a new scene

if ([tou         


        
相关标签:
2条回答
  • 2020-12-05 20:04

    if you have to work on touch-begain or node action , Then use it:

    override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
            let touch = touches.anyObject() as UITouch
            if CGRectContainsPoint(btncloseJump.frame, touch.locationInNode(self)) {
                self.scene.removeFromParent()
                btncloseJump.removeFromParent()
                let skView = self.view as SKView
                skView.ignoresSiblingOrder = true
                var scene: HomeScene!
                scene = HomeScene(size: skView.bounds.size)
                scene.scaleMode = .AspectFill
                skView.presentScene(scene, transition: SKTransition.fadeWithColor(SKColor(red: 25.0/255.0, green: 55.0/255.0, blue: 12.0/255.0, alpha: 1), duration: 1.0))
            }
        }
    
    0 讨论(0)
  • 2020-12-05 20:24

    To start with your second question, it's kind of up to you. If you wish to, you can continue to follow the Objective-C convention of having one class per file, although this isn't a requirement, and wasn't in Objective-C either. That being said, if you have a couple of classes that are tightly related, but aren't made up of much code, it wouldn't be unreasonable to have them grouped in a single file. Just do what feels right, and don't make a huge blob of code in a single file.

    Then for your first questions... Yes, you had a good deal of it already. Basically, from where you got up to, you need to create the instance of GameScene through its size: initializer. From there, you just set the properties and call present.

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        super.touchesBegan(touches, withEvent: event)
    
        guard let location = touches.first?.locationInNode(self),
            let scene = scene,
            nodeAtPoint(location) == "Game Button" else {
            return
        }
    
        let transition = SKTransition.reveal(
            with: .down, 
            duration: 1.0
        )
    
        let nextScene = GameScene(size: scene.size)
        nextScene.scaleMode = .aspectFill
    
        scene.view?.presentScene(nextScene, transition: transition)
    }
    
    0 讨论(0)
提交回复
热议问题