【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;
};
たはー。やりました……!
て、やっと不具合を直してゼロに戻っただけなんですけどね……!
その他
・コンパス表示のサインの改善
体験版部分も改善しました。
・データ、イベント実装