【完了】コードのファクタリング依頼:MOG_BattleHudのパッチプラグイン

アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

【完了】コードのファクタリング依頼:MOG_BattleHudのパッチプラグイン

投稿記事by ムノクラ » 2020年3月31日(火) 19:18

まず、目的は下記のトピックの要望を叶えることです。
viewtopic.php?f=23&t=9123

本人の中では解決しているようですが、全く解決していなく、さらに難しい要望を出しています。

viewtopic.php?f=49&t=9139
質問の中には書かれていませんが、最初の質問内容から察するに、

・フトコロ様制作スキルツリーシステム(FTKR_SkillTreeSystem)
・道楽様制作パッシブスキル(dsPassiveSkill)
を使用したアクターの能力(習得スキル等を全てクローンする)のを希望しているようです。

自分には無茶な要望にしか見えないので、MOG_BattleHudのアクター画像をスイッチで入れ替えられる方が現実的だと思い着手しています。

一応、最低限(1アクター)の変更はできるようになりました。
https://github.com/munokura/RpgMakerMV/ ... geActor.js

しかし、かなりコードが重複しているので、機能追加(複数アクター対応)の前に、コードを整理したいと考え、下記記事を参考に試行錯誤しているのですが、解決できませんでした。

https://qiita.com/yamachan360/items/416 ... f25bbf0050
viewtopic.php?t=6451

スイッチが入ると、アクター画像が真っ暗になってしまう途中のファイルを添付します。
(本当はブランチとか使ってアップしたほうが良いのかも知れませんが、GitHubを今日使えるようになったばかりなので、ゆくゆくは…)

皆さんのご指導、お願いいたします。
添付ファイル
MNKR_MOG_BattleHud_ChangeActor.js
(2.7 KiB) ダウンロード数: 4 回
最後に編集したユーザー ムノクラ on 2020年3月31日(火) 22:24 [ 編集 2 回目 ]

---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: コードのファクタリング依頼:MOG_BattleHudのパッチプラグイン

投稿記事by Plasma Dark » 2020年3月31日(火) 22:13

まず、挙動を変えずにコードを読みやすく整形したり内部構造を整理することをリファクタリング(あるいはリファクタ。名詞か動詞かの違いだけですが)と呼びます。

https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

通常、リファクタリングのためには元のコードの挙動を理解している必要があります。
そういった意味で、MOG系プラグインのリファクタリングは相当に難易度が高いです。

create_face 関数に絞って改変されているのはとても良いと思います。
改変の箇所が少ないということは、それだけ影響の範囲も少なくなるので。

ただ、 create_face 関数は有効な値を返す関数ではなく、その戻り値を代入して返す意味はありませんし、元々の処理にプラスして何かさせることで実現するべき仕様でもないように思えます。
無理に元の関数を呼ぼうとせず、まるごと上書きしてしまうべきでしょう。どうせこんな関数は他の誰もいじらないので、競合を心配する必要はありません。

複数対応の際にバグった理由としては、this._face.bitmap に何故か文字列を代入されているためでしょう。型が違うので正常に動かなくなります。
他にも何かありそうな気はしますが、元が元なだけに詳細に突っ込んでいると日が何度巡るかわからないので、とりあえずこれくらいで。
アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: コードのファクタリング依頼:MOG_BattleHudのパッチプラグイン

投稿記事by ムノクラ » 2020年3月31日(火) 22:24

Plasma Dark さんが書きました:まず、挙動を変えずにコードを読みやすく整形したり内部構造を整理することをリファクタリング(あるいはリファクタ。名詞か動詞かの違いだけですが)と呼びます。

https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

通常、リファクタリングのためには元のコードの挙動を理解している必要があります。
そういった意味で、MOG系プラグインのリファクタリングは相当に難易度が高いです。

create_face 関数に絞って改変されているのはとても良いと思います。
改変の箇所が少ないということは、それだけ影響の範囲も少なくなるので。

ただ、 create_face 関数は有効な値を返す関数ではなく、その戻り値を代入して返す意味はありませんし、元々の処理にプラスして何かさせることで実現するべき仕様でもないように思えます。
無理に元の関数を呼ぼうとせず、まるごと上書きしてしまうべきでしょう。どうせこんな関数は他の誰もいじらないので、競合を心配する必要はありません。

複数対応の際にバグった理由としては、this._face.bitmap に何故か文字列を代入されているためでしょう。型が違うので正常に動かなくなります。
他にも何かありそうな気はしますが、元が元なだけに詳細に突っ込んでいると日が何度巡るかわからないので、とりあえずこれくらいで。


なるほど、ファクタリングではなく、リファクタリング(もしくはリファクタ)と呼ぶのですね。

確かに元のプラグインはかなりアレな仕組みをしていそうな気がしたので、勉強の題材として考えていたのですが、あまり良くない題材のようですね。
これを改善することよりも、次のステップ(パラメーターのリスト化)に進むほうが、有意義そうですね。
今回の相談は別件として、改めて相談させていただきます。

ありがとうございました。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。

“MV:質問” へ戻る