ホーリーのプログラミング日記

ホーリーのプログラミング日記

エキセントリック・スーパーアプリクリエイター / アプリ総DL数 約180万 / 全然分からない 俺は雰囲気でアプリを作ってる / iOS : apple.co/3m3HxSm / Android : bit.ly/3ma0liZ

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のセーブ機能はこんな感じです。セーブして、それをロードしてってことですね。

簡単なゲームの、ちょっとした記録なら、これで十分だと思います。