メッセージウィンドウ表示時、情報ウィンドウを非表示に配置したい
http://ktnhmv.jugem.jp/?eid=21
こちらのサイトを参考に、マップ画面の右上に空腹度を表す情報ウィンドウを表示させたのですが、
この状態で画面上部にメッセージウィンドウを表示させると、文字の上の上に情報ウィンドウが被さり見えなくなってしまいます。
トリアコンタン様のプラグイン「Chronus.js」のように、上部にメッセージウィンドウが表示された場合、情報ウィンドウを非表示にさせたいです。
どなたかソースコードをどう書き換えればよいかお教え下さい。
1.5.0
こんにちは。
メッセージウィンドウが表示されているかどうかは、
$gameMessage.isBusy()の真偽を判定するとわかります。
真ならメッセージウィンドウを表示している、となります。
また、ウィンドウの表示非表示を切り替える場合は、show()とhide()を使います。
参考にされたサイトの記述にあわせると、Scene_Mapクラス内で
this._InfoWindow.show() で情報ウィンドウを表示
this._InfoWindow.hide() で情報ウィンドウを非表示
となります。
これを組み合わせると、メッセージウィンドウを表示している場合に
情報ウィンドウを非表示にするためには、以下のソースコードになります。
コード:
if ($gameMessage.isBusy()) {
this._InfoWindow.hide();
} else {
this._InfoWindow.show();
}
あとは、これをどこに記述すればよいかですが、メッセージウィンドウは
どのタイミングで表示するかわかりませんので、常に判定できるようにする必要があります。
マップシーンで常時繰り返し実行される処理部は、Scene_Mapのupdate()処理です。
そのため、update()処理内に上記のコードを追加するとうまくいくと思います。
以下は一例。
コード:
var _Scene_Map_update = Scene_Map.prototype.update;
Scene_Map.prototype.update = function() {
_Scene_Map_update.call(this);
if ($gameMessage.isBusy()) {
this._InfoWindow.hide();
} else {
this._InfoWindow.setText();
this._InfoWindow.show();
}
}
ただし、この状態だとメッセージウィンドウをどの位置に表示しても、
情報ウィンドウが消えてしまいます。
それでもいいなら問題ありませんが、表示位置と被る場合のみ消したい場合は
メッセージウィンドウの表示位置でも判定する必要があります。
メッセージウィンドウの表示位置は、$gameMessage.positionType()で分かります。
この値が 0なら上、1なら中央、2なら下に表示、となります。
情報ウィンドウは上に配置していますので、判定条件は以下の通りです。
$gameMessage.positionType() === 0 または !$gameMessage.positionType()
これを、メッセージウィンドウの表示判定をしているif分の条件式の中に組み込むと
表示位置でも判定できます。
以下は一例。
コード:
var _Scene_Map_update = Scene_Map.prototype.update;
Scene_Map.prototype.update = function() {
_Scene_Map_update.call(this);
if ($gameMessage.isBusy() && !$gameMessage.positionType()) {
this._InfoWindow.hide();
} else {
this._InfoWindow.setText();
this._InfoWindow.show();
}
}