1. mochizukikotaro

    No comment

    mochizukikotaro
Changes in body
Source | HTML | Preview

あるシーンからResultSceneへの遷移をする場合。

let tr = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1)
let newScene = ResultScene(size: self.scene.size)
newScene.scaleMode = SKSceneScaleMode.AspectFill
self.scene.view.presentScene(newScene, transition: tr)

デフォルトでは、スケールモードがAspectFillになっているので、コレを設定しておいた方が遷移後のシーンのアスペクト比がずれないので良いと思います。

ラベルをタップしたら遷移する場合。

TitleSceneからGameSceneへの移動。Startラベルをタップしたら遷移するように設定しています。

if touchedNode.name {}の部分などは冗長な気がしているのですが、よくわからず、今のところこのようにしています。もっと綺麗な方法がありそうです…。

TitleScene.swift

import SpriteKit

class TitleScene: SKScene {

    override func didMoveToView(view: SKView) {

        let startLabel = SKLabelNode(fontNamed: "Copperplate")
        startLabel.text = "Start"
        startLabel.fontSize = 50
        startLabel.position = CGPoint(x: 512, y: 300)
        startLabel.name = "Start"
        self.addChild(startLabel)
    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

        for touch in touches {
            let location = touch.locationInNode(self)
            let touchedNode = self.nodeAtPoint(location)

            if touchedNode.name {

                if touchedNode.name == "Start" {
                    let tr = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1)
                    let newScene = GameScene(size: self.scene.size)
                    newScene.scaleMode = SKSceneScaleMode.AspectFill
                    self.scene.view.presentScene(newScene, transition: tr)
                }
            }
        }
    }

    override func update(currentTime: CFTimeInterval) {}
}
TitleScene.swift

import SpriteKit

class TitleScene: SKScene {

    override func didMoveToView(view: SKView) {

        let startLabel = SKLabelNode(fontNamed: "Copperplate")
        startLabel.text = "Start"
        startLabel.fontSize = 50
        startLabel.position = CGPoint(x: 512, y: 300)
        startLabel.name = "Start"
        self.addChild(startLabel)
    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

        let touch: AnyObject = touches.anyObject()!
        let location = touch.locationInNode(self)
        let touchedNode = self.nodeAtPoint(location)

        if touchedNode.name {
            if touchedNode.name == "Start" {
                let tr = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1)
                let newScene = GameScene(size: self.scene.size)
                newScene.scaleMode = SKSceneScaleMode.AspectFill
                self.scene.view.presentScene(newScene, transition: tr)
            }
        }
    }

    override func update(currentTime: CFTimeInterval) {}
}