cocos2d-xでゲームデータをPlistで管理する
ゲームデータを保存するには主に二つの方法があります:
- sqliteを利用してデータを保存
- ファイルベースでデータを保存(XML, JSONなど)
sqliteのようなデータベースを使うと、データのソートや抽出など、明らかにファイルベースより都合がいいと思いますが、その代わりにデータ抽出の処理を書かなくちゃいけないです。
本当にデータベースなんか必要なのか?
ゲームの種類にはよるけど、本当にデータベースが必要になってくるのは恐らくFootball Managerのような、データ処理がメインで、大量なデータが必要なゲームでしょう。普通のカードゲームなどはファイルベースで十分です。あとバックエンドがあれば、ソートなどはバックエンドに任せてもいいと思います。
cocos2d-xゲームデータの保存
ユーザーデータならUserDefault
を使えばよいでしょう。他のデータはplistとして保存して、ディレクトリーで管理すればといいと思います。
JSONかplistか? cocos2d-xはcocos2dから生まれたフレームワークで、iOSがネイティヴにサポートしているplistがJSONより都合がよかったので、cocos2d-xもそのまま引き継いてplistをメインに使っています。もちろんcocos2d-xはJSONもサポートしています
plistファイルを読み込む
plistを読み込むのが簡単です、cocos2d-xのFileUtils
に便利なメソードがあります:
ValueMap
からデータを取得するには、.as<型>
というメソードを使います:
この例ではやってないですが、値を取り出す前に、
.isNull()
で値が存在するかどうかを確認することが必要です。
ValueMapをplistファイルに書き込む
cocos2d-xでplistファイルを作成するのも簡単です:
書き出したファイルの中身は下記になります:
plistは単純なxmlなので、ウェブサーバーからxmlをリスポンスして、アプリ側でFileUtils::getValueMapFromData()
を使って受け取ればデータの処理も円滑になりますし、一番重要なのは、機能自身がcocos2d-xに入ってるので、ラッパーとか作る手間も必要なく楽です。