SpriteKit를 통한 화면 마이그레이션

우리는 버튼을 누르고 어떤 화면에 가고 싶은 등 화면을 바꾸는 장면을 어떻게 실현하는지 조사했다.

전제 조건


스프릿키트에서 화면이란 SKScene class로 표현된다.화면마다 SKScene class를 제작한다는 얘기다.

(iOS) 할 일

  • ViewController.swift에서 처음 화면에 그려진 SKScene class를 호출합니다.
    4
  • SKScene class를 계기로 다음 SKScene class 호출
    클라스부터 써.

    코드


    Hop, Step, Jump를 클릭할 때마다 화면 마이그레이션 코드를 씁니다.(간단하다!)

    최초 화면을 담당하는 HopScene class를 쓰도록 하겠습니다.


    1화면 모드로 프로젝트를 제작하면 다음 파일을 만들 수 있습니다.

    여기는 홉씬입니다.swift를 추가하여 HopScene 화면의 내용과 터치한 후 다음class 처리를 제거합니다.
    (단, 다음 클라스는 아직 쓰지 않았기 때문에 이렇게 쓰면 X코드에 욕을 먹기 때문에 적당한 댓글을 출력하고 클라스를 쓴 후에 답장합니다.)
    HopScene.swift
    import SpriteKit
    
    class HopScene: SKScene{
        override func didMoveToView(view: SKView) {
    //この画面に来たときにHopって書いてあるラベルを配置
            let label = SKLabelNode()
            label.text = "Hop"
            label.position = CGPoint(x:100,y:70)
            self.addChild(label)        
        }
    
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            if let _ = touches.first as UITouch? {
    //タッチを検出したときにStepSceneを呼び出す
                let scene = StepScene(size: self.scene!.size)
                scene.scaleMode = SKSceneScaleMode.AspectFill
                self.view!.presentScene(scene)
    
            }
        }
    }
    

    JumpScene class 만들기


    하고 있는 일은 홉씬이다.swift와 기본적으로 같습니다.거의 복제품이라 더 멋있게 뛰어다니는 느낌이에요.
    StepScene.swift
    import SpriteKit
    
    class StepScene: SKScene{
        override func didMoveToView(view: SKView) {
            let label = SKLabelNode()
            label.text = "Step"
            label.position = CGPoint(x:100,y:70)
            self.addChild(label)
        }
    
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            if let _ = touches.first as UITouch? {
                let scene = JumpScene(size: self.scene!.size)
    //呼び出すSceneをJumpScene classにしただけ
                scene.scaleMode = SKSceneScaleMode.AspectFill
                self.view!.presentScene(scene)
            }
        }
    }
    
    JumpScene.swift
    import SpriteKit
    
    class JumpScene: SKScene{
        override func didMoveToView(view: SKView) {
    
            let label = SKLabelNode()
            label.text = "Jump"
            label.position = CGPoint(x:100,y:70)
            self.addChild(label)
    
        }
    
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            if let _ = touches.first as UITouch? {
                let scene = HopScene(size: self.scene!.size)
                scene.scaleMode = SKSceneScaleMode.AspectFill
                self.view!.presentScene(scene)
            }
        }
    }
    

    ViewController.swift에서 최초의 SKScene class를 부르다


    ViewController.swift
    import UIKit
    import SpriteKit
    
    class ViewController: UIViewController {
        override func viewDidLoad() {
            //HopSceneを呼ぶ
            let view = self.view as! SKView
            let scene = HopScene()
            scene.size = view.frame.size
            view.presentScene(scene)
        }
    }
    
    초기 상태에서는뷰가 SKView가 안 돼서 혼나요.
    Main.storyboard로 Class를 SKView class로 만듭니다.
    (선택 항목으로 사용할 수 없기 때문에 손으로 쳐야 합니다. 선택 항목으로 사용하려면 Linked Framework에 Sprite Kit.frame work를 추가하는 것이 좋습니다.)
  • 좋은 웹페이지 즐겨찾기