BETA

CocosCreator UserDataStorage(localStorage)の実装について

投稿日:2019-01-02
最終更新:2019-01-02

経緯

セーブ/ロードをしたいとき、localStorageを使うべしととある本に書かれていた。
こういったものは下位レイヤの実装が分からないと運用で困るので、ある程度下調べしておきたい。
特に、ストレージの保存の確実性とデータのライフサイクル(特に揮発タイミング、ユーザ操作でのデータ操作可否等)は把握したい。

結論

(v2.1現在では) CocosCreeatorのLocalStorageは、下記の場所に保存されている

Webブラウザの場合: Web Storage API
nativeの場合: 不明

engineのソースを読む限りは、localStorageはそのままWeb Storage APIを使用している。
そのため、揮発タイミングや容量の制限、ユーザ操作でのデータ操作可否はWeb Storage APIを生で使用した場合と同一と考えて良さそう。

追ってみた

Cocos Creator v2.1 Manal より
https://docs.cocos2d-x.org/creator/2.1/manual/en/advanced-topics/data-storage.html

cc.sys.localStorage API is quite similar to Web Storage API. When running on Web platform it will call Web Storage API directly, on native platform it will use sqlite to save and read data on disk.

どうやら、Web版ならWeb Storage API。nativeならsqlite3 ? で保存らしい。

しかし、engineのソースを読んだ所、CocosCreator + nativeビルドの実装は見当たらなかった。
未調査だが、おそらくcocos-2dx側のライブラリを使って動いている可能性が高い。
もしnativeビルドを使用するようだったら、Editor側に設定したCocos2d-x側のソースも読んでおきたいところ

CCSys::initSys()
=> window.localStorageをsys.localStorageに投入している。
(なぜかビルド種別ごとに代入 => 後から追加で上書いている。意図は感じられないのでDRYじゃないだけかもしれない)

代入しているのはここ
https://github.com/cocos-creator/engine/blob/2.1.0/cocos2d/core/platform/CCSys.js#L881

でもって、winはwindow
https://github.com/cocos-creator/engine/blob/2.1.0/cocos2d/core/platform/CCSys.js#L709

ccSysにはnative用の実装を読んでる形跡は見当たらないので、多分ビルド時にバインドしていると思われる。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@12Tc5Qcd4w1YFXFgの技術ブログ

よく一緒に読まれる記事

1件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
06/12 09:39

nativeの場合はsqliteに保存します。

目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!