概要
ゲームなどをスタートする場合に 5 からカウントダウンする場合があると思います
自分が作っているゲームアプリでも必要になりそうだったので試しに作ってみました
環境
- macOS X 10.13.1
- Xcode Version 9.1 (9B55)
GameScene.sks
こんな感じで背景とカウントする用のノードを追加します
背景は SKSpriteNode ですがカウントするのは SKLabelNode を使っています
カウントダウンするのに画像を使いたい場合はカウントダウン用のノードも SKSpriteNode にしたほうが良いかなと思います
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 でカウントダウンする画面を作成してみました
もしかするともっとかっこいい画面を簡単に作成できるライブラリがあるかもしれません
とりあえず簡単にかつ自作したいという場合に参考にしてみてはいかがでしょうか
0 件のコメント:
コメントを投稿