Table of Contents
Cocos2d-x(Cocos2d-js)で、ファイルとしてテキストを保存する方法についてです。
jsb.fileUtilsを用いる
cocos2d-js を利用する場合、ファイルの読み書きはクラス jsb.fileUtils を使うのが一般的かと思います。実際にコードを書いて試してみました。
jsb.fileUtils | JsDoc Reference
サンプルコード
cocos2d-x のプロジェクトを新規作成し、app.js をクラス jsb.fileUtils のメソッドを使うだけの簡単なプログラムに書き換えます。最終的なコードの形は以下のようになります。
var HelloWorldLayer = cc.Layer.extend({ sprite: null, ctor: function() { this._super(); this.jsbTest(); }, jsbTest: function() { if (!cc.sys.isNative || !jsb.fileUtils) { // jsb.fileUtilsが使えない環境下では処理を行わない return; } // データを保存できるディレクトリのパスを取得 var writablePath = jsb.fileUtils.getWritablePath(); cc.log("writable path: " + writablePath); // 保存ファイル名 var fileName = "testFile"; // 保存するテキストをKey-Value形式で var data = { name: "Cocos2d-x js save text.", description: "This is only a test." }; if (jsb.fileUtils.writeToFile(data, writablePath + fileName)) { // ファイル書き込みに成功 cc.log("Succeeded to write string"); var string = jsb.fileUtils.getValueMapFromFile(writablePath + fileName); // 保存されたテキストの表示 cc.log('name: ' + string.name); cc.log('description: ' + string.description); } else { // ファイル書き込みに失敗 cc.log("Failed to write string"); } }, }); var HelloWorldScene = cc.Scene.extend({ onEnter: function() { this._super(); var layer = new HelloWorldLayer(); this.addChild(layer); } });
初めから書かれているコンストラクタ(ctor)の中身を全て消して、今回作ったテキスト保存用のメソッドを呼び出すだけにしています。
サンプルソースコードの解説
保存先のディレクトリを取得 – getWritablePath
以下のメソッドで、iOSやAndroid端末上でファイルを保存可能なディレクトリのパスを知ることができます。
jsb.fileUtils.getWritablePath()
例えば、iOSであれば、以下のようにアプリの Documentディレクトリ のパスが文字列で返されます。
/var/mobile/Containers/Data/Application/A7DE73A6-B23D-4533-8F65-2B12C16CBE5A/Documents/
ファイルの書き込み – writeToFile
実際にデータをファイルに書き込むメソッドは writeToFile です。引数は以下のようです。
jsb.fileUtils.writeToFile(書き込むマップオブジェクトデータ, ファイルの絶対パス)
この例では、変数 data に保存したいテキストを、キーと値のペアで設定しています。
var data = { name: "Cocos2d-x js save text.", description: "This is only a test." };
保存するファイルは絶対パスで指定します。保存したマップオブジェクトデータは、内部的には plist となっています。
このメソッドは、ファイルの保存に成功した場合 true を返すので、成功した場合のみ中身を取り出す処理を行うようにしています。
ちなみに、単純な文字列を保存する場合は writeStringToFile を使用します。
保存したオブジェクトを取得 – getValueMapFromFile
以下のメソッドで、保存したオブジェクトを取り出せます。引数は、ファイルの絶対パスを表す文字列です。
jsb.fileUtils.getValueMapFromFile(ファイルの絶対パス);
実行結果
iOSアプリとAndroidアプリで実行した結果です。
iOS
Android
name と description が無事取り出せています。以上でオブジェクト形式でテキストの保存ができました。