独自のデータをセーブする
はじめに
ツクールMVのセーブデータはjson。正確には以下のコードのようにLZStringライブラリを使って、Base64にしつつ圧縮している。
LZString.compressToBase64(json);
自分の好きなデータを保存したい場合、既にある$gameSystemとか$gameVariablesといった変数に付け足す方法がある。
デフォルトで入っているアイテム図鑑プラグインのItemBook.jsは$gameSystemを拡張して、アイテムの取得済みかどうかを保存している。以下のようにGame_System($gameSystem)に_itemBookFlagsを追加している。
Game_System.prototype.clearItemBook = function() {
this._ItemBookFlags = [[], [], []];
};
この方法でも問題ないが、がっつり独自のセーブデータを作った方がいいケースもある。その方法を解説する。
DataManagerを拡張
ツクールのセーブする変数は$gameで始まるのでそれにのっとる。今回は、$gameMyというのを作る。
必要なのは、初期化、セーブ、ロード、の3つ。
以下のような感じになる。
(function(){
window.$gameMy = {};
var _createGameObjects = DataManager.createGameObjects;
DataManager.createGameObjects = function() {
_createGameObjects.call(this);
$gameMy = new Game_My();
};
var _makeSaveContents = DataManager.makeSaveContents;
DataManager.makeSaveContents = function() {
var contents = _makeSaveContents.call(this);
contents.gameMy = $gameMy;
return contents;
};
var _extractSaveContents = DataManager.extractSaveContents;
DataManager.extractSaveContents = function(contents) {
_extractSaveContents.call(this, contents);
$gameMy = contents.gameMy;
};
function Game_My(){
this.saveSomething = "aaa"; //自由にデータを追加できる
}
})();
これでGame_My($gameMy)を通して自由にデータを追加して保存できる。