2017年11月17日金曜日

SpriteKit でカウントダウンする画面を作ってみた

概要

ゲームなどをスタートする場合に 5 からカウントダウンする場合があると思います
自分が作っているゲームアプリでも必要になりそうだったので試しに作ってみました

環境

  • macOS X 10.13.1
  • Xcode Version 9.1 (9B55)

GameScene.sks

こんな感じで背景とカウントする用のノードを追加します
背景は SKSpriteNode ですがカウントするのは SKLabelNode を使っています
カウントダウンするのに画像を使いたい場合はカウントダウン用のノードも SKSpriteNode にしたほうが良いかなと思います
spritekit_countdown1.png

Scene の設定で CustomClass に「GameScene」を設定しておきましょう

GameScene.swift

sks ファイル上に配置したノードを使って Swift 側でカウントダウン処理を実装します
で全容は以下の通りです
初めに言っておきますがとりあえず動けば良いと思って作ったのでソースコードはかなり適当です

import SpriteKit

class GameScene: SKScene {

    var background = SKSpriteNode()
    var count = SKLabelNode()

    override func didMove(to view: SKView) {
        // 各種ノードを初期化
        background = childNode(withName: "background") as! SKSpriteNode
        count = childNode(withName: "count") as! SKLabelNode
        // wait するアクションを定義
        let wait = SKAction.wait(forDuration: 1.0)
        // 5 から 1 までカウントダウンするアクションを定義
        let five = SKAction.run({
            self.count.text = "5"
        })
        let four = SKAction.run({
            self.count.text = "4"
        })
        let three = SKAction.run({
            self.count.text = "3"
        })
        let two = SKAction.run({
            self.count.text = "2"
        })
        let one = SKAction.run({
            self.count.text = "1"
        })
        // 背景とカウントダウンのラベルを非表示にするアクションを定義
        let hidden = SKAction.run({
            self.background.isHidden = true
            self.count.isHidden = true
        })
        // アクションを実行
        self.run(SKAction.sequence([wait, five, wait, four, wait, three, wait, two, wait, one, wait, hidden]))
    }
}

説明はコード内にコメントを記載してあります
基本はカウントダウンする SKAction を作成してそれを SKAction.sequence でつなぎ合わせて run するだけです

かなりコードが冗長なのでカウントダウンするアクションの部分はループなので書き直せると思います

もしカウントダウンするラベルが SKSpriteNode なのであれば .texture でカウントダウンごとに画像を変更すれば OK かなと思います

あと今回背景用のノードを一つ追加しています
カウントダウンが終了するまでゲームを始めたくない場合に背景用のノードを最前面に置いておくことでタップなどをさせないように制御することができます
背景用のノードを非表示にすることで実際にゲームする画面にタップすることができるようになるという感じです

動作確認

こんな感じで動きます
うーん、それっぽい

spritekit_countdown2.gif

最後に

SpriteKit でカウントダウンする画面を作成してみました
もしかするともっとかっこいい画面を簡単に作成できるライブラリがあるかもしれません
とりあえず簡単にかつ自作したいという場合に参考にしてみてはいかがでしょうか

参考サイト

0 件のコメント:

コメントを投稿