kuro 2021/01/06 12:06

【426日目】2021/1/5 実装&デバッグ作業20

バトル中PT入れ替え機能

+@の機能実装に挑んだところ別問題を発見。
不具合の調査をしていました。

挙動:
1.バトル画面
2.パーティーコマンド「戦う、逃げる、並び替え」
3.並び替え→入れ替え画面へ遷移(入れ替え画面にシーン遷移)
4.入れ替え処理を実行
5.パーティーコマンドに復帰(バトル画面にシーン遷移)
6.アクターコマンド「攻撃、魔法、防御……」

問題:
2→3で動いていたパーティクルが静止状態になり、5で画面が戻ったときに動かない。
2→3に遷移したタイミングの画面が、スクリーンショットを撮ったように残存してる。

対策:
・パーティー画面遷移はYEP_PartySystem.js
以下の処理で入れ替え画面(PartyCommandWindow)遷移前に保持している様子。
この中でパーティクル含めて静止画として保存されているようです。

Yanfly.Party.Scene_Battle_createDisplayObjects
Yanfly.Party.Scene_Battle_createSpriteset
Yanfly.Party.Scene_Battle_createPartyCommandWindow
Scene_Battle.prototype.partyCommandFormation

・パーティクルはTRP_Particle.jsのパラメーターbattle、battleWeatherで表示
$gameScreen._particle.removeBattleScreenParticles();で一括削除できそう

解決方法案:
a.3のタイミングで表示パーティクルを記憶させ、パーティクル削除処理を実行。
b.5のタイミングで3の情報を基にパーティクルを再生成。

必要なこと:
・aとbのために、TRP_Particle.jsで実行しているbattle,battleWeatherオプションの呼び出し全てに変数を割り当てる。
・3と5の実装方法
3はYanfly.Party.Scene_Battle_createSpriteset()の前
5は$gameTemp.restoreBattleSpriteset()の後

懸念点:
・他に効率の良い実装方法がないか(今の技量でできるか)
・実行内容は一瞬のため、パフォーマンスへの影響は高くない(高くとも継続しないので許容される)

優先度は低い処理なので、全体作業見極めて判断します。
以上、課題整理兼ねたログでした。

【追記】
YEP_PartySystem.jsのScene_Battle.prototype.partyCommandFormationにて、Spriteset周りを調べていたら再描画と思しき箇所を発見。
画面遷移前の画面再生を抑止することができました。

後は元々表示していたパーティクルを識別する値を変数に格納し、
partyCommandFormation終了後にコモンイベントで変数に対応したパーティクル再生成命令を組めば大丈夫なはず……!

Scene_Battle.prototype.partyCommandFormation = function() {

BattleManager._bypassMoveToStartLocation = true;
$gameParty.loadActorImages();
this.prepareBackground();
BattleManager._savedActor = BattleManager.actor();
$gameSystem.setBattleFormationCooldown();
Yanfly.Party.SavedBattleBgm = AudioManager.saveBgm();
Yanfly.Party.SavedBattleBgs = AudioManager.saveBgs();
//$gameTemp.storeBattleSpriteset();//ここをコメントアウトで再描画抑止
SceneManager.push(Scene_Party);
BattleManager._phase = 'input';
$gameTemp._partyBattle = true;

};

たはー。やりました……!
て、やっと不具合を直してゼロに戻っただけなんですけどね……!

その他

・コンパス表示のサインの改善
 体験版部分も改善しました。

・データ、イベント実装

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

記事のタグから探す

月別アーカイブ

記事を検索