subject
戦闘シーンで追加ウィンドやスプライトを追加した際、ステータスウィンドが非表示のとき追加したものを非表示に、ステータスウィンドが表示のとき追加したものを表示にするようにしました。
しかしながら、たまにバトル終了時に非表示にならず
バトル終了時メッセージが下に行くことがあります。
(この際、えんたーすると追加スプライトが消えてメッセージがサイド表示される)
バグを探しましたがわかりませんでした。解明をお願いいただけないでしょうか。
下記にあるthis._isBattleActive が true =>表示, false =>非表示 です
ソースコード
//戦闘状態がアクティブかノンアクティブであるかを判断しboolean型を返します
BattleManager.updateBattleActive = function(){
switch(BattleManager._phase){
case 'turn':
case 'action':
case 'turnEnd':
case 'input':
case 'waiting':
case 'aborting':
this._isBattleActive = true;
break;
case 'start':
case 'battleEnd':
case 'init':
case null:
this._isBattleActive = false;
break;
}
};
var BM_update = BattleManager.update;
BattleManager.update = function() {
BM_update.call(this);
this.updateBattleActive();
};
var _BattleManager_InitMembers = BattleManager.initMembers;
BattleManager.initMembers = function() {
_BattleManager_InitMembers.call(this);
this._isBattleActive = false;
};
現状
★バトル終了ウィンドが2回表示される事がある(1回目は顔グラウィンドが上に表示されている)
❤知りたいこと
❤どのようなことがこのコードに足りていないか
❤なぜこの不具合は生じたか
❤今後コマンドウィンドの改造を行う際に気をつけるべきこと
皆様の知識を是非貸していただきたいです。お願いいたします
追加スプライトが非表示ならないバグ【自己解決済み。】
- kannazaki_
- 記事: 8
- 登録日時: 2019年7月31日(水) 20:17
追加スプライトが非表示ならないバグ【自己解決済み。】
最後に編集したユーザー kannazaki_ [ 2020年2月15日(土) 22:24 ], 累計 2 回
- kannazaki_
- 記事: 8
- 登録日時: 2019年7月31日(水) 20:17
Re: 追加スプライトが非表示ならないバグ【バグ原因の特定依頼】
すみません。自己解決しました。
後ほど解決方法を掲載する予定です。
皆様には余計な時間的に消費させてしまい申し訳ございませんでした。
★解決方法
バトル画面のステータスウィンドの表示,非表示を行うメソッドでBattleManager._isBattleActiveを変更させる。
このメソッドは Scene_Battle.updateStatusWindow でScene_Battle.updateに呼び出されて実行しています。
★ソースコード
Scene_Battle.prototype.updateStatusWindow = function () {
if ($gameMessage.isBusy()) {
this._statusWindow.close();
this._partyCommandWindow.close();
this._actorCommandWindow.close();
//↓this is change
BattleManager.updateBattleActive(false);
} else if (this.isActive() && !this._messageWindow.isClosing()) {
this._statusWindow.open();
//↓this is change
BattleManager.updateBattleActive(true);
}
};
BattleManager.updateBattleActive = function (bool) {
if (bool) {
this._isBattleActive = true;
} else {
this._isBattleActive = false;
}
};
こんな感じです
後ほど解決方法を掲載する予定です。
皆様には余計な時間的に消費させてしまい申し訳ございませんでした。
★解決方法
バトル画面のステータスウィンドの表示,非表示を行うメソッドでBattleManager._isBattleActiveを変更させる。
このメソッドは Scene_Battle.updateStatusWindow でScene_Battle.updateに呼び出されて実行しています。
★ソースコード
Scene_Battle.prototype.updateStatusWindow = function () {
if ($gameMessage.isBusy()) {
this._statusWindow.close();
this._partyCommandWindow.close();
this._actorCommandWindow.close();
//↓this is change
BattleManager.updateBattleActive(false);
} else if (this.isActive() && !this._messageWindow.isClosing()) {
this._statusWindow.open();
//↓this is change
BattleManager.updateBattleActive(true);
}
};
BattleManager.updateBattleActive = function (bool) {
if (bool) {
this._isBattleActive = true;
} else {
this._isBattleActive = false;
}
};
こんな感じです