ページ 11

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

Posted: 2018年1月08日(月) 13:33
by にゃたま
こんにちは。いつもお世話になっております

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

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

追記
尚、FTKR_ExMessageWindow2及びMessageWindowPopupプラグインを使用しており
ポップアップは例外的にエフェクトの下にしたいです(現状維持でお願いします)

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

Posted: 2018年1月08日(月) 17:42
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が独自のウィンドウレイヤーを作っていない場合(たぶん作ってないと思います。作ってたらすみません)、「ポップアップだけエフェクトの下にする~」というのはプラグインの改造が必要になります。
対応していただけるかどうかは不明ですが、プラグインの制作者さんに依頼してみてはいかがでしょうか。

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

Posted: 2018年1月08日(月) 19:57
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を完全に上書きする形になって
しまいましたが競合の原因になったりするでしょうか?

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

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