ページ 11

【解決済】カーソル移動で表示が変わるウィンドウの作り方

Posted: 2021年8月16日(月) 09:48
by シンゴビッチ
ヘルプウィンドウのような、決定キーを押さないでカーソルが移動するだけで情報が変わるウィンドウの作り方を教えてほしいです。

アクターのメンバー編成のプラグインを独自に作成しており、多数の情報を表示するsceneで全部表示してると画面サイズが全くたりないので、ヘルプウィンドウみたいにアクターのHPやMPと言った情報がカーソルを移動しただけで変わるウィンドウが作成したいです。宜しくお願いします。

Re: カーソル移動で表示が変わるウィンドウの作り方

Posted: 2021年8月17日(火) 15:29
by くろうど
こんにちは。
私は、MZを触っているので、MVでは異なる点があるかもしれませんが、
考え方は同じだと思いますので、以下に記述します。

現状が分かりませんが、Window_Selectable を継承していると思いますので、
select をオーバーライドしてアクター情報(ステータス)を更新する処理を行うと良いと思います。

ちなみに、callUpdateHelpの動きも参考になる気がします。

コード: 全て選択

Window_Selectable.prototype.select = function(index) {
    this._index = index;
    this.refreshCursor();
    this.callUpdateHelp();
};

Window_Selectableを継承したWindowクラスを新規作成して、オーバーライド等します。
シーン側でこのWindowを追加します。

コード: 全て選択

Window_FormationBase = class extends Window_StatusBase {
	select(index) {
		super.select(...arguments);
		this.updateStatusWindow(index);
	}
	
	updateStatusWindow(index) {
		const members = $gameParty.members();
		if (index >= 0) {
			this._statusWindow.setActor(members[index]);
		}
	}
};
ステータス表示Windowは以下のようなクラスを新規作成すると良いと思います。
シーン側でこのWindowを追加します。

コード: 全て選択

Window_FormationStatus = class extends Window_StatusBase {
	initialize(rect) {
		super.initialize(...arguments);
		this._actor = null;
	}

	setActor(actor) {
		if (this._actor !== actor) {
			this._actor = actor;
			this.refresh();
		}
	}

	refresh() {
		super.refresh();
		this.drawItem();
	}

	drawItem() {
		if (this._actor) {
			const pw = ImageManager.faceWidth;
			const ph = ImageManager.faceHeight;
			this.drawActorFace(this._actor, PARAM_FACE_X, PARAM_FACE_Y, pw, ph);
			this.drawActorSimpleStatus(this._actor, PARAM_STATUS_X, PARAM_STATUS_Y);
		}
	}
};
尚、上記ソースコードは参考情報なので、コピペしても動かないと思います。
よろしくお願いします。

Re: カーソル移動で表示が変わるウィンドウの作り方

Posted: 2021年8月18日(水) 08:58
by シンゴビッチ
>くろうどさん
 回答ありがとうございます。ほぼ望んだどおりの情報をいただきました。
 まだ試してはいませんが、多分上手くいくのでは?と思います。

 取り急ぎ返信だけさせていただきます。

Re: カーソル移動で表示が変わるウィンドウの作り方

Posted: 2021年8月18日(水) 15:02
by シンゴビッチ
>くろうどさん
 
 ありがとうございました!
 無事解読して実装する事が出来ました。助かりました!