【解決済】バトル画面への自作ウインドウ追加&重なりの優先度設定方法の質問

返信する
gurenfantajia
記事: 2
登録日時: 2021年1月11日(月) 16:22

【解決済】バトル画面への自作ウインドウ追加&重なりの優先度設定方法の質問

投稿記事 by gurenfantajia »

みなさんの投稿を興味深く拝見させていただいています。
ツクールを始めて数週間、プラグインも学び始めたばかりの素人なんですが、
「バトル画面での新規自作ウインドウの追加方法と表示優先度の設定」について教えてください。

バトル画面で「エネミーの一覧表示ウインドウ」を画面左下に常時表示させたいと試行錯誤しています。
既存のコマンドウインドウ・ステータスウインドウは右側に寄せて、空いた隙間に常に敵の名前と数が表示されているイメージです。簡単に言えば、昔のファイナルファンタジーの画面レイアウトの再現です。
191b1de4.jpg
191b1de4.jpg (21.37 KiB) 閲覧された回数 1865 回
※デフォルトのエネミー選択ウインドウだと選択時にしか画面に表示されず、
 さらにサイドビューだと上と下の両方でカーソル表示で選択するのは混乱するので
 希望のエネミーウインドウはあくまで「名前と数の表示のみ(選択処理なし)を常時表示」が理想です。



いろいろ検索してみたのですが、上記が再現できそうなプラグインは発見できなかったので
みなさんの投稿やこちらの記事(http://ktnhmv.jugem.jp/?eid=21)を参考にしながら
自作プラグインに手を出してみました。
ひとまず、バトルコマンド・ステータスコマンドのレイアウト配置は完了し、
思った位置にウインドウを表示するところまではできました。

ただ、この自作ウインドウが常に最前面に表示されるため、
コマンドウインドウやスキルやアイテムが下に隠れてしまい困っています。

WIndowLayer等の設定?定義?とかを指定するのかなと思うのですが、
何をどう書き込めばいいか全く分からない状況です。

プラグイン内でのウインドウ表示の処理としては、
・バトルシーンにウインドウを表示するという宣言をしたあとに

コード: 全て選択

	function Window_Info() {
	    this.initialize.apply(this, arguments);
	}

	Window_Info.prototype = Object.create(Window_Base.prototype);
	Window_Info.prototype.constructor = Window_Info;
	Window_Info.prototype.initialize = function() {
		var x = 0;
		var y = 384;
	    var width = 393;
	    var height = 156;
	    Window_Base.prototype.initialize.call(this, x, y, width, height);
	    this.opacity = 0;
	};
	
この他にはフォントサイズ・余白・透明度等を指定の処理を入れています。
※参考としてこの部分のプラグインを添付します(使い物になりませんが)
NKSH_OriginalEnemyWindow.js
(2.15 KiB) ダウンロード数: 4 回


また、表示する敵の名前は、戦闘時のバトルイベントで
プラグインコマンドから変数に敵の名前を個別に格納させ、
その変数を表示するところまではできました。(ただし同種の敵もバラバラに表示されますが)

希望としては
①自作ウインドウを表示しても、コマンドウインドウ・スキルリスト等が表示された場合は下に隠れる。
②敵を倒すとそのタイミングでウインドウに状況が反映される
③敵の名前は同種であればソートして表示(「スライム 2」のように)

この全てが実現できるのが理想です。
ただ、可能であればひとまず①だけでも方法を知りたいです。


なお、現在制作中のRPGは木星ペンギン様のATBとFTKR様のCustomSimpleActorStatus等を導入しており
YEP系プラグインで恐らく使えないかなと思っています。
また、そもそもjavascript自体をちゃんと理解していない段階で切り貼り整形で作っており、
できれば「処理の仕方」ではなく、実際の具体的なコードを教えていただけると大変助かります。


不慣れなもので必要な情報が足りないかもしれずお手数をおかけいたしますが
諸先輩方のお知恵を是非ともお貸し下さい!よろしくお願いします!
最後に編集したユーザー gurenfantajia [ 2021年1月20日(水) 13:16 ], 累計 1 回
gurenfantajia
記事: 2
登録日時: 2021年1月11日(月) 16:22

Re: バトル画面への自作ウインドウ追加&重なりの優先度設定方法の質問

投稿記事 by gurenfantajia »

自己回答になりますが、ほぼ同じ状況についてのこちら(https://forum.tkool.jp/index.php?thread ... %83%88.59/)に対するトリアコンタン様の回答で光明が見えました。

追加でウインドウを作成した時に、新規ウインドウを「ウインドウレイヤー」に含める方法について下記のように回答されてらっしゃいました。
ウィンドウレイヤーという既存の仕組みで、カレンダーウィンドウをメッセージウィンドウより奥に表示するようにしています。
これによりメッセージウィンドウが表示されるとカレンダーウィンドウは隠れて見えなくなります。

この仕組みをInfoWindow.jsにも適用させればOKだと思います。
変更前のコードを変更後のコードに置き換えてください。

変更前のコード(15行目付近)
PHP:
// マップ上にウィンドウ表示するよ宣言
var Scene_map_start = Scene_Map.prototype.start;
Scene_Map.prototype.start = function() {
Scene_map_start.call(this);
this._InfoWindow = new Window_Info();
this.addWindow(this._InfoWindow);
};
変更後のコード
PHP:
// マップ上にウィンドウ表示するよ宣言
var _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
Scene_Map.prototype.createAllWindows = function() {
this._InfoWindow = new Window_Info();
this.addWindow(this._InfoWindow);
_Scene_Map_createAllWindows.apply(this, arguments);
};

自分のプラグインに上記を組み込んだところ、希望通りに「常に表示&コマンドウインドウが現れても隠さない」が実現できました。
プログラムが書ける方にとってはたいしたことではないと思いますが、一応カタチになったプラグインを添付に付けておきます。(現状は敵の1体目のみの名前表示になっています/どういじっていただいてもOKです)


サイドビュー戦闘を選択している方で、
・画面サイズ16:9にした時にステータスウインドウが横長すぎてバランスが悪いため何か足したい
or
・エネミーコマンドを表示させずカーソル処理で選択しているけど敵の名前を見せたい
とかって時には使えるんじゃないかと。

なお、パラメーター設定が分からなかったので、ウインドウの位置やサイズも自分用に直接数値指定している状態です。

今後、変数とコモンイベントを使って複数の敵の名前まで表示させる仕組みを作る予定ですが、ひとまず解決済とさせていただきます。
添付ファイル
NKSH_OriginalEnemyWindow.js
(2.59 KiB) ダウンロード数: 46 回
返信する

“MV:質問”に戻る