iPhoneアプリ(SpriteKit)にSwiftでセーブ機能を実装する方法
なんか前に書いた気がしますけど、職安へ行こうを作ったとき、一番困ったのがセーブです。ようはコンティニュー出来るようにしたかったんですが、そのやり方を知らなかったので大変でした。
結論から言えば、SpriteKitではじめる2Dゲームプログラミングって本に書いてあったので、それを参考にしました。本格的なセーブ機能を実装しようと思ったら、アプリとデータベースを連携させないといけないんでしょうけど、ちょっとしたものなら、これで十分出来ますね。
NSUserDefaultsを生成する
セーブを実装するにはNSUserDefaultsっていうクラスを使います。自分でもよく分かってませんが、とにかくこれを使うんです。
例えばGameSceneクラスってクラスがあったら、まずは冒頭にこんなコードを書きましょう。
class GameScene: SKScene {
let defaults = NSUserDefaults.standardUserDefaults()
〜省略〜
実際にセーブしてみる
キーを設定して、そこに任意の値を格納することが出来ます。
defaults.setObject(0, forKey: "STAGE")
defaults.synchronize()
これでOK。STAGEってキーに対して、0の数値を格納しました。
このキーをいくつ設けられるのか知りませんが、例えばSTAGEを1〜10まで設定して、クリアしたら1にして、クリアしてないものは0にする、なんてことも出来ますね。
これはアプリ自体が削除されるまで、そのデータが残るみたいです。僕は最初はゲームのハイスコアを記録するためにこれを使いました。
GameCenterと連動させてはいたんですが、ゲームのタイトル画面に、自分のハイスコアを表示したかったんですよね。
セーブしたデータを読み込む
セーブしたデータを読み込むには、こんな感じに書けばOKです。
var stageCount = self.defaults.integerForKey("STAGE")
上の方で、このSTAGEに0って値を格納したと思うんですけど、今それを出してみました。この場合はstageCountって変数に0の値が入っています。
最後に
僕が知ってるSpriteKitのセーブ機能はこんな感じです。セーブして、それをロードしてってことですね。
簡単なゲームの、ちょっとした記録なら、これで十分だと思います。