【解決済み】メッセージウィンドゥの重なり順について

返信する
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡する:

【解決済み】メッセージウィンドゥの重なり順について

投稿記事 by にゃたま »

こんにちは。いつもお世話になっております

まずはじめにこちらのエフェクトプラグインを使用しております。
https://forums.rpgmakerweb.com/index.ph ... ect.49578/

こちらを有効にするとメッセージウィンドゥがエフェクトの下に隠れるようになってしまいます。
メッセージウィンドゥのみ手前に出したいと思います。
そのためにはプラグインを修正する必要があると思いますがどのあたりに手を入れたらよいでしょうか?
ヒントだけでもご教授願えませんでしょうか?

追記
尚、FTKR_ExMessageWindow2及びMessageWindowPopupプラグインを使用しており
ポップアップは例外的にエフェクトの下にしたいです(現状維持でお願いします)
添付ファイル
このように黒枠の下にウィンドゥが隠れてしまいます
このように黒枠の下にウィンドゥが隠れてしまいます
最後に編集したユーザー にゃたま [ 2018年1月09日(火) 01:25 ], 累計 1 回
アバター
ツミオ
記事: 83
登録日時: 2017年4月02日(日) 13:46
連絡する:

Re: メッセージウィンドゥの重なり順について

投稿記事 by ツミオ »

こんにちは。

通常の場合ですと、ウィンドウは
Scene_Map.prototype.createDisplayObjects内の

コード: 全て選択

    this.createWindowLayer();
    this.createAllWindows();
で作られます。

一方、エフェクトプラグイン内では以下のようにオーバーライドされています。

コード: 全て選択

var _Firgof_CRTLED_init = Scene_Map.prototype.createDisplayObjects;
Scene_Map.prototype.createDisplayObjects = function() {
	_Firgof_CRTLED_init.call(this);

	Scene_Map.createCRTLED();
	this.addChild($crt_overlay1);
	this.addChild($crt_overlay3);
	this.addChild($crt_overlay2);
	this.addChild($crt_overlay8);
	this.addChild($crt_overlay11);
	this.addChild($crt_overlay4);
	this.addChild($crt_overlay5);
}
つまり、エフェクトよりも先にウィンドウレイヤーを作成しているため、ウィンドウがエフェクトの下に表示されてしまっています。
実際に試してはいませんが、このウィンドウレイヤーの順番を入れ替えれば、恐らくウィンドウをエフェクトよりも上に表示させることができます。

ただFTKR_ExMessageWindow2及びMessageWindowPopupが独自のウィンドウレイヤーを作っていない場合(たぶん作ってないと思います。作ってたらすみません)、「ポップアップだけエフェクトの下にする~」というのはプラグインの改造が必要になります。
対応していただけるかどうかは不明ですが、プラグインの制作者さんに依頼してみてはいかがでしょうか。
【Twitter】https://twitter.com/TsumioNtGame/
【GitHub】https://github.com/Tsumio/rmmv-plugins

有償の依頼も募集中。
今まで有償で制作したものは実績をご覧ください。
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡する:

Re: メッセージウィンドゥの重なり順について

投稿記事 by にゃたま »

ツミオ様

いつもお世話になっております。
ツミオ さんが書きました: つまり、エフェクトよりも先にウィンドウレイヤーを作成しているため、ウィンドウがエフェクトの下に表示されてしまっています。
実際に試してはいませんが、このウィンドウレイヤーの順番を入れ替えれば、恐らくウィンドウをエフェクトよりも上に表示させることができます。
createAllWindows()の中でcreateMessageWindow()しているということは
この前にエフェクトの$crt_overlay**をaddChildすればよいことはわかったので
以下のようにしてみました。


 

コード: 全て選択

Scene_Map.prototype.addOverlay = function() {
        this.createCRTLED();
        this.addChild($crt_overlay1);
        this.addChild($crt_overlay3);
        this.addChild($crt_overlay2);
        this.addChild($crt_overlay8);
        this.addChild($crt_overlay11);
        this.addChild($crt_overlay4);
        this.addChild($crt_overlay5);
    };
    Scene_Map.prototype.createDisplayObjects = function() {
        this.createSpriteset();
        this.createMapNameWindow();
        if($gameMap._enableCRT){
            this.addOverlay();
        }
        this.createWindowLayer();
        this.createAllWindows();
    };
結果的には何も変化しませんでした。
因みに他のプラグインは全てオフで試しています。
Scene_Map.prototype.createDisplayObjectsを完全に上書きする形になって
しまいましたが競合の原因になったりするでしょうか?

他に何か思い当たるようなところはあるでしょうか?
よろしくお願いいたします。

追記
解決しました。ありがとうございました。
返信する

“MV:質問”に戻る