戦闘シーンの改造をしたい

アバター
much
記事: 66
登録日時: 2017年11月09日(木) 01:01

戦闘シーンの改造をしたい

投稿記事by much » 2023年5月22日(月) 18:49

こんにちは!いつもお世話になっております。

戦闘シーンなのですが、現状の戦闘シーンは以下の流れだと思います。

①戦闘アニメーションを再生
②ダメージアクションを再生

例えば、2連続攻撃のスキルを使用した場合、

①アニメーションを再生
②「●●にXXのダメージ」「●●にYYのダメージ」というメッセージとポップアップが表示

これを、アニメーション再生時にダメージポップアップを同時に再生したいのです。

そこで、戦闘アニメーションの再生のメカニズムに関して知りたいのですが、どのクラスのどのメソッドを参照すればいいかどなたか教えていただけますでしょうか?

アバター
much
記事: 66
登録日時: 2017年11月09日(木) 01:01

戦闘シーンの改造をしたいの追加説明

投稿記事by much » 2023年5月22日(月) 18:51

現状

・アニメーションデータベースのメモ欄にダメージアクションを差し込むフレーム番号を列挙する
・アニメーションの再生時にフレームを監視して、フレーム番号でターゲットのダメージアクションを発火

という流れで実装できないかと考えています。
アバター
剣崎 宗二
記事: 681
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: 戦闘シーンの改造をしたい

投稿記事by 剣崎 宗二 » 2023年5月22日(月) 22:34

Window_BattleLog.prototype.startAction
からshowAnimation関係を順にたどればよいかと考えます。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
アバター
much
記事: 66
登録日時: 2017年11月09日(木) 01:01

Re: 戦闘シーンの改造をしたい

投稿記事by much » 2023年5月25日(木) 02:13

回答ありがとうございます!
こちらのメソッドですよね。

コード: 全て選択

Window_BattleLog.prototype.startAction = function(subject, action, targets, animeTargets) {
    var item = action.item();
    this.push('performActionStart', subject, action);
    this.push('waitForMovement');
    this.push('performAction', subject, action);
    this.push('showAnimation', subject, animeTargets.clone(), item.animationId);
    this.displayAction(subject, item);
};


this.pushが何なのか見に行ってみたところ、

コード: 全て選択

Window_BattleLog.prototype.push = function(methodName) {
    console.log(methodName);
    var methodArgs = Array.prototype.slice.call(arguments, 1);
    this._methods.push({ name: methodName, params: methodArgs });
};


こんなメソッドでした。_methodというWindow_BattleLogクラスのメンバに実行するメソッドと引数の値を保存しているようでした。

実際どんなメソッド名が飛んできているのかconsole.logで調べてみたところ

「〇〇の攻撃!」

コード: 全て選択

rpg_windows.js:4852 wait
rpg_windows.js:4852 performActionStart
rpg_windows.js:4852 waitForMovement
rpg_windows.js:4852 performAction
rpg_windows.js:4852 showAnimation
rpg_windows.js:4852 addText


「〇〇に●●のダメージ!」

コード: 全て選択

rpg_windows.js:4852 pushBaseLine
rpg_windows.js:4852 pushBaseLine
rpg_windows.js:4852 popupDamage
rpg_windows.js:4852 popupDamage
rpg_windows.js:4852 performDamage
rpg_windows.js:4852 addText
rpg_windows.js:4852 waitForNewLine
rpg_windows.js:4852 popBaseLine
rpg_windows.js:4852 popBaseLine
rpg_windows.js:4852 waitForNewLine
rpg_windows.js:4852 clear
rpg_windows.js:4852 performActionEnd
[2]rpg_windows.js:4852 popupDamage
[2]rpg_windows.js:4852 popupDamage


とこんな感じでメソッドが流れてきていました。

performActionやperformActionStartがアニメーション再生っぽいなと思って見に行きました。

コード: 全て選択

Window_BattleLog.prototype.performAction = function(subject, action) {
    subject.performAction(action);
};


subjectが敵の場合、 subject.performAction(action);はGame_Enemy.prototype.performAction;に該当するので、見に行くと

コード: 全て選択

Game_Enemy.prototype.performAction = function(action) {
    Game_Battler.prototype.performAction.call(this, action);
};


こんな内容で、 Game_Battler.prototype.performActionを呼び出して実行してるっぽいので、Game_Battler.prototype.performActionを見に行きました。

コード: 全て選択

Game_Battler.prototype.performAction = function(action) {
};


しかし、中身は何の記述もなかったです。

アニメーションの処理のたどり方ってこれで合っていますでしょうか??
アバター
剣崎 宗二
記事: 681
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: 戦闘シーンの改造をしたい

投稿記事by 剣崎 宗二 » 2023年5月25日(木) 12:40

アニメーションであればそちらではなく、

Window_BattleLog.prototype.showAnimation
↓(ほとんどの場合)
Window_BattleLog.prototype.showNormalAnimation

Game_Battler.prototype.startAnimation
↓(Sprite_Battler=キャラ画像 側が毎フレームisAnimationRequestedを通してこれを監視)
Sprite_Base.prototype.startAnimation
↓(作られた各Sprite_Animationでそれぞれ毎フレーム)
Sprite_Animation.prototype.update

で各Spriteの画像を差し替えて、アニメーションを形成している形となります。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。

“MV:質問” へ戻る