投稿記事

羽根珈琲 2024/04/09 03:11

羽根珈琲 2024/04/08 04:24

羽根珈琲 2024/04/07 16:40

羽根珈琲 2024/04/07 07:07

羽根珈琲 2024/04/07 02:57

制作ノート:5h,(変数保存プラグイン)_20240406

変数保存

一つ値を保存するところまで自作プラグインを用意して、そもそもセーブしてないから保存もなにも確認してないことに気づいた。

これもしかしてプラグインいらないんじゃない?

でもせっかくだから、特定の変数の呼び出しと保存を行う関数を作ってみる。
NPCイベントの位置を保存しなきゃいけないということに変わりはないし、x座標とy座標を保存するのに実行内容2行使うのは面倒だからね。

変数の保存と読み出しがうまくできず詰まったけど、利用する変数IDの範囲を広げたら解決した。
変数ID1~80までしか使わないよって設定で変数ID:100を指定してたから動かなかった。
そんなの勝手によろしくやってほしい。

  • マップ移動前に位置を保存するイベント
  • マップ移動後に保存した位置を読み出して位置移動のイベント

を用意して、マップを移動してもイベントの位置が変わらないようになった。

ついでに、イベントスクリプトべた書きだと長くて可読性が低いので、プラグインの中にイベント位置を設定する関数を用意した。

$gameMap だと現在のマップしか操作できないけど、
その他マップのイベントって触れないのかなと思って調べたらあんまり推奨されてないらしい。やりたかったら追加でマップごと読み込んでねって感じだった。それは嫌だ。

setLocate() は現在いるマップからしか呼び出さないので、マップIDやイベントIDの引数は不要とした。
saveLocate(x,y) は、他マップからイベントの位置を操作/保存したくなる可能性を考慮して引数をいれることにした。現在のマップからしか呼び出さないなら引数なしにもできるんだけども、俺は未来の俺のことがよくわからないから、未来の俺にやさしくしておいてあげよう。(未来の俺が「引数面倒!」って言ってる可能性も、あります!)

キャラチップが表示されない

ゲーム新規スタート時、キャラの位置の初期設定を行う。
各マップに最初に遷移したタイミングで、キャラクターの位置を設定する。

しかしこのイニット時、表示より先に値を参照してしまうからか、イベントキャラチップが正しく表示されない。
あれこれ試して、
rpgツクールのソフト側で設定する変数に格納すると現象が発生しないことが分かった。
でもこれは変数枠を不必要に使ってしまう。

イニットの前に、マップのイベントを一つrefresh()すると再現しないことが分かった。

refresh()を挟むことで、イベントの値参照の処理タイミングがずれるのか、それともrefresh()に意味があるのか確認してないけど、とりあえずこれで対処することにした。


スクリプトメモ

  • 自作プラグインで用意した関数
    _MyVariables.locateMob01()
    _MyVariables.saveLocateMob01(x,y)
    _MyVariables.setLocateMob01()

  • モブ01のイベントスクリプト内で、モフ01の位置情報を保存:
    $gameSystem._MyVariables.saveLocateMob01(this.character(0).x, this.character(0).y);
    このとき、xじゃなくてscrooledXをとると、マップ上の位置じゃなくて画面上の位置をとるのでよくない。

  • マップ移動後に保存したイベントの位置を再設定
    this.character(3).setPosition($gameSystem._MyVariables.locateMob01().x, $gameSystem._MyVariables.locateMob01().y);
  • テキストメッセージのウィンドウを新規作成
    $gameMessage.newPage();
  • テキストメッセージウィンドウにテキストを追加。
    $gameMessage.add();
    これ単体でもウィンドウが表示されるけど、既にウィンドウが表示されている場合はそこにテキストが追加で表示される。

スクリプトベタ

(() => {

    // Game_System
    // プラグインのデータを保存するために
    // Game_Systemにオブジェクトを追加しておく
    // ---------- Game_System ここから ----------
    var _Game_System_initialize = Game_System.prototype.initialize;
    Game_System.prototype.initialize = function(){
	    _Game_System_initialize.call(this);
	    this._MyVariables = new Game_MyVariables();
    };

    Game_System.prototype.MyVariables = function(){
	    return this._MyVariable;
    };
    // ---------- Game_System ここまで ----------

    // 自作クラス(オブジェクト)
    const Mob01_MapId = 4;
    const Mob02_MapId = 3;
    const Mob03_MapId = 3;
    const Mob04_MapId = 4;
    const Mob05_MapId = 2;
    const Mob06_MapId = 3;
    const Mob01_EventId = 3;
    const Mob02_EventId = 4;
    const Mob03_EventId = 5;
    const Mob04_EventId = 4;
    const Mob05_EventId = 1;
    const Mob06_EventId = 6;

    // ---------- Game_MyVariables ここから ----------
    Game_MyVariables.prototype            = Object.create(Game_MyVariables.prototype);
    Game_MyVariables.prototype.costructor = Game_MyVariables;
    
    Game_MyVariables.prototype.initialize = function(){
	    this._count = 0;
        this.mob01_X = 0;
        this.mob01_Y = 0;
        this.mob02_X = 0;
        this.mob02_Y = 0;
        this.mob03_X = 0;
        this.mob03_Y = 0;
        this.mob04_X = 0;
        this.mob04_Y = 0;
        this.mob05_X = 0;
        this.mob05_Y = 0;
        this.mob06_X = 0;
        this.mob06_Y = 0;
    };

    // モブ位置読み出し
    Game_MyVariables.prototype.locateMob01 = function(){//モブ01
        return {'x': this.mob01_X, 'y': this.mob01_Y};
    }
    Game_MyVariables.prototype.locateMob02 = function(){//モブ02
        return {'x': this.mob02_X, 'y': this.mob02_Y};
    }
    Game_MyVariables.prototype.locateMob03 = function(){//モブ03
        return {'x': this.mob03_X, 'y': this.mob03_Y};
    }
    Game_MyVariables.prototype.locateMob04 = function(){//モブ04
        return {'x': this.mob04_X, 'y': this.mob04_Y};
    }
    Game_MyVariables.prototype.locateMob05 = function(){//モブ05
        return {'x': this.mob05_X, 'y': this.mob05_Y};
    }
    Game_MyVariables.prototype.locateMob06 = function(){//モブ06
        return {'x': this.mob06_X, 'y': this.mob06_Y};
    }

    //モブ位置保存
    Game_MyVariables.prototype.saveLocateMob01 = function(x, y){//モブ01
        this.mob01_X = x; this.mob01_Y = y;
    }
    Game_MyVariables.prototype.saveLocateMob02 = function(x, y){//モブ02
        this.mob02_X = x; this.mob02_Y = y;
    }
    Game_MyVariables.prototype.saveLocateMob03 = function(x, y){//モブ03
        this.mob03_X = x; this.mob03_Y = y;
    }
    Game_MyVariables.prototype.saveLocateMob04 = function(x, y){//モブ04
        this.mob04_X = x; this.mob04_Y = y;
    }
    Game_MyVariables.prototype.saveLocateMob05 = function(x, y){//モブ05
        this.mob05_X = x; this.mob05_Y = y;
    }
    Game_MyVariables.prototype.saveLocateMob06 = function(x, y){//モブ06
        this.mob06_X = x; this.mob06_Y = y;
    }

    //モブ位置設定
    Game_MyVariables.prototype.setLocateMob01 = function(){//モブ01
        if(!$gameMap.mapId()===Mob01_MapId){$gameMessage.add("0011_Error: this function exec from only MapID: "+Mob01_MapId);return false;}
        $gameMap.event(Mob01_EventId).setPosition($gameSystem._MyVariables.mob01_X, $gameSystem._MyVariables.mob01_Y);
    }
    Game_MyVariables.prototype.setLocateMob02 = function(){//モブ02
        if(!$gameMap.mapId()===Mob02_MapId){$gameMessage.add("0012_Error: this function exec from only MapID: "+Mob02_MapId);return false;}
        $gameMap.event(Mob02_EventId).setPosition($gameSystem._MyVariables.mob02_X, $gameSystem._MyVariables.mob02_Y);
    }
    Game_MyVariables.prototype.setLocateMob03 = function(){//モブ03
        if(!$gameMap.mapId()===Mob03_MapId){$gameMessage.add("0013_Error: this function exec from only MapID: "+Mob03_MapId);return false;}
        $gameMap.event(Mob03_EventId).setPosition($gameSystem._MyVariables.mob03_X, $gameSystem._MyVariables.mob03_Y);
    }
    Game_MyVariables.prototype.setLocateMob04 = function(){//モブ04
        if(!$gameMap.mapId()===Mob04_MapId){$gameMessage.add("0014_Error: this function exec from only MapID: "+Mob04_MapId);return false;}
        $gameMap.event(Mob04_EventId).setPosition($gameSystem._MyVariables.mob04_X, $gameSystem._MyVariables.mob04_Y);
    }
    Game_MyVariables.prototype.setLocateMob05 = function(){//モブ05
        if(!$gameMap.mapId()===Mob05_MapId){$gameMessage.add("0015_Error: this function exec from only MapID: "+Mob05_MapId);return false;}
        $gameMap.event(Mob05_EventId).setPosition($gameSystem._MyVariables.mob05_X, $gameSystem._MyVariables.mob05_Y);
    }
    Game_MyVariables.prototype.setLocateMob06 = function(){//モブ06
        if(!$gameMap.mapId()===Mob06_MapId){$gameMessage.add("0016_Error: this function exec from only MapID: "+Mob06_MapId);return false;}
        $gameMap.event(Mob06_EventId).setPosition($gameSystem._MyVariables.mob06_X, $gameSystem._MyVariables.mob06_Y);
    }

    Game_MyVariables.prototype.magic = function(){
        // 最初にイベントを読み込むとき、表示より先に値を参照してしまうからか、イベントキャラチップが正しく表示されない。
        // よくわかんないけど、各マップinit時にこれを置いておくと表示が崩れない。
        $gameMap.event(1).refresh();
    }

    // ---------- Game_MyVariables ここまで ----------    

})();

はい。

4 5 6 7 8 9 10

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索