【完了】プラグインのレビュー依頼:敵グループのランダム化
トピックの投稿
返信へ【完了】プラグインのレビュー依頼:敵グループのランダム化
色々な方にTwitterでアドバイスをいただきながら、作成しました。
主に別関数部分はとんび氏にアドバイスをいただき、MV専用の関数(JsonEx.parse)を使用しています。
※JsonEx.parseはどのバージョンから使用できるのかご存知の方は教えて下さい。
それ以外の箇所のレビューは受けていないのと、スイッチ的な処理があり書き換えの余地があるのは理解しています。
コアと重複部分があるのは認識していますが、どう順番を整理すれば上手く処理できるのかが解決できませんでした。
現時点でYEP Swap Enemies相当の機能はあると思います。
http://www.yanfly.moe/wiki/Swap_Enemies_(YEP)
▼余談
理想としては、下記の記事で紹介している「Random Enemies」プラグインを改善したものに仕上げたいです。
https://fungamemake.com/archives/57
https://forums.rpgmakerweb.com/index.php?threads/48224/
課題は出現させない手法が何もつかめていないことです。
--
余談の分はさておき、ご指導よろしくお願いいたします。
主に別関数部分はとんび氏にアドバイスをいただき、MV専用の関数(JsonEx.parse)を使用しています。
※JsonEx.parseはどのバージョンから使用できるのかご存知の方は教えて下さい。
それ以外の箇所のレビューは受けていないのと、スイッチ的な処理があり書き換えの余地があるのは理解しています。
コアと重複部分があるのは認識していますが、どう順番を整理すれば上手く処理できるのかが解決できませんでした。
現時点でYEP Swap Enemies相当の機能はあると思います。
http://www.yanfly.moe/wiki/Swap_Enemies_(YEP)
▼余談
理想としては、下記の記事で紹介している「Random Enemies」プラグインを改善したものに仕上げたいです。
https://fungamemake.com/archives/57
https://forums.rpgmakerweb.com/index.php?threads/48224/
課題は出現させない手法が何もつかめていないことです。
--
余談の分はさておき、ご指導よろしくお願いいたします。
- 添付ファイル
-
MNKR_RandomEnemies.js- (1.67 KiB) ダウンロード数: 14 回
最後に編集したユーザー ムノクラ [ 2020年3月29日(日) 16:06 ], 累計 1 回
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
- Plasma Dark
- 記事: 740
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: プラグインのレビュー依頼:敵グループのランダム化
conditionの値を初期化していないように見えます。全ての敵が出なくなり、自動勝利となります
そのため、敵グループの設定を全く行わずに戦闘処理が進み、敵が誰もいないので自動勝利します。
敵グループの設定は、一度は必ず通ってほしい処理なので、do whileで書いてしまったほうが良いかもしれませんね。
Re: プラグインのレビュー依頼:敵グループのランダム化
分かりました!Plasma Dark さんが書きました:conditionの値を初期化していないように見えます。全ての敵が出なくなり、自動勝利となります
そのため、敵グループの設定を全く行わずに戦闘処理が進み、敵が誰もいないので自動勝利します。
敵グループの設定は、一度は必ず通ってほしい処理なので、do whileで書いてしまったほうが良いかもしれませんね。
また、スコープの問題ですね。
重複しているかなと思って弄った箇所が裏目に出ていたようですが、今回の変更で動くようになりました。
冗長なコードだとは思いますが、これで動作は問題なくなったと思います。
- 添付ファイル
-
MNKR_RandomEnemies72.js- (2.32 KiB) ダウンロード数: 10 回
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
- Plasma Dark
- 記事: 740
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: プラグインのレビュー依頼:敵グループのランダム化
こうなると、github(あるいはgitだけでも)の利用を強く推奨したくなりますね。
conditionを宣言している行での初期化がいつの間にかなくなっているというのは、ファイル名によるバージョン管理が失敗していることの証左です。
githubでは以下のように、コミットごとの差分を確認できます。
https://github.com/elleonard/RPGtkoolMV ... TextLog.js
今すぐに始められるものでもないかもしれませんが、バージョン管理ツールとして極めて強力であり、今回のcondition未初期化のような本質的でないバグを防げる(すなわち、レビューの効率も良くなる)ということはご理解いただけるものと思います。
conditionを宣言している行での初期化がいつの間にかなくなっているというのは、ファイル名によるバージョン管理が失敗していることの証左です。
githubでは以下のように、コミットごとの差分を確認できます。
https://github.com/elleonard/RPGtkoolMV ... TextLog.js
今すぐに始められるものでもないかもしれませんが、バージョン管理ツールとして極めて強力であり、今回のcondition未初期化のような本質的でないバグを防げる(すなわち、レビューの効率も良くなる)ということはご理解いただけるものと思います。
- Plasma Dark
- 記事: 740
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: プラグインのレビュー依頼:敵グループのランダム化
動作に関して言えば問題ないと思います。
Re: プラグインのレビュー依頼:敵グループのランダム化
ファクタリングが必要ですよね。Plasma Dark さんが書きました:動作に関して言えば問題ないと思います。
冗長なコードなのは自覚しているので、この数日で教えていただいた || を使ってみました。
これで1つ重複している箇所が省略できたと思います。
あとは、randomEnemyIdとenemyIdを上手く統合できれば一気に削れるような気がしたのですが、関数に分けたので、上手いこと統合(もしくは簡略化)することが、今の自分には出来ませんでした。
一箇所だけ、省略できたものを出します。
ここは「これはこう書くべき」というのを拝見して、比較しないと学習するのは難しいと感じています。
GitHubは、まだ夢の世界です。
少しずつ挑戦していますが…
- 添付ファイル
-
MNKR_RandomEnemies8.js- (2.35 KiB) ダウンロード数: 10 回
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
- Plasma Dark
- 記事: 740
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: プラグインのレビュー依頼:敵グループのランダム化
実は、短いコードが良いコードである、というのにも限度があります。randomEnemyIdとenemyIdを上手く統合できれば一気に削れるような気がしたのですが
多少冗長でも意味が伝わりやすいコードを書いたほうが良いです。
そういう意味ではひとまず十分なコードだと思います。
指摘する部分があるとすれば、以下の通りです。
- conditionが使われるのはsetup関数の中だけなので、setup関数の先頭で宣言、初期化するとスコープを限定できて良い。(というより、今のままだと2回目以降の戦闘で自動勝利しそう)
- 36行目のrandomEnemyIdの初期化は無意味なので、直接 var randomEnemyId = selectEnemyId($dataEnemies[member.enemyId]) と書いて良い。今の記述では、なぜか空配列で初期化されており、後で扱う値と型が違うため行儀が悪い。(しぐれんさんのご指摘にもありますが)
- 66行目のrandomEnemyIdは代入する必要がなく、直接返してしまっても良い。 return Number(pool[Math.randomInt(pool.length)]);
Re: プラグインのレビュー依頼:敵グループのランダム化
ご指摘いただいた箇所を修正し、動作確認できました。Plasma Dark さんが書きました:実は、短いコードが良いコードである、というのにも限度があります。randomEnemyIdとenemyIdを上手く統合できれば一気に削れるような気がしたのですが
多少冗長でも意味が伝わりやすいコードを書いたほうが良いです。
そういう意味ではひとまず十分なコードだと思います。
指摘する部分があるとすれば、以下の通りです。
- conditionが使われるのはsetup関数の中だけなので、setup関数の先頭で宣言、初期化するとスコープを限定できて良い。(というより、今のままだと2回目以降の戦闘で自動勝利しそう)
- 36行目のrandomEnemyIdの初期化は無意味なので、直接 var randomEnemyId = selectEnemyId($dataEnemies[member.enemyId]) と書いて良い。今の記述では、なぜか空配列で初期化されており、後で扱う値と型が違うため行儀が悪い。(しぐれんさんのご指摘にもありますが)
- 66行目のrandomEnemyIdは代入する必要がなく、直接返してしまっても良い。 return Number(pool[Math.randomInt(pool.length)]);
1.conditionの宣言位置は変更前でも自動勝利しませんでしたが、理論的にはこちらのほうが正しそうというのが理解できた(つもり)なので、変更しました。
2.空配列で初期化していたのは、参考にしていたコードがそう書いていたからそのまま真似しました。
意味がないというのを直ぐに理解できませんでした。
削除して動作したのを確認し、必要ないことを理解しました。
3.なるほど、先程nullを返す時も、直接returnで返していたので、同じ理屈ですね。
とても勉強になりました。
ありがとうございました!
- 添付ファイル
-
MNKR_RandomEnemies82.js- (2.15 KiB) ダウンロード数: 10 回
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
- Plasma Dark
- 記事: 740
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: プラグインのレビュー依頼:敵グループのランダム化
ifによる分岐を減らしたければ、以下のように書くことは可能です。
Game_Enemyに渡すべき敵IDと、隠すために使うランダム選択IDが別の存在なので、コードは短くなりますがちょっとわかりにくいかもしれません。
コード: 全て選択
var randomEnemyId = selectEnemyId($dataEnemies[member.enemyId]);
var enemy = new Game_Enemy(randomEnemyId || member.enemyId, member.x, member.y);
if (randomEnemyId === 0 || member.hidden) {
enemy.hide();
} else {
condition = false;
}
this._enemies.push(enemy);Re: プラグインのレビュー依頼:敵グループのランダム化
まだ、直感的に理解できるほどではないですが、処理の意味は理解できました。Plasma Dark さんが書きました:ifによる分岐を減らしたければ、以下のように書くことは可能です。
Game_Enemyに渡すべき敵IDと、隠すために使うランダム選択IDが別の存在なので、コードは短くなりますがちょっとわかりにくいかもしれません。コード: 全て選択
var randomEnemyId = selectEnemyId($dataEnemies[member.enemyId]); var enemy = new Game_Enemy(randomEnemyId || member.enemyId, member.x, member.y); if (randomEnemyId === 0 || member.hidden) { enemy.hide(); } else { condition = false; } this._enemies.push(enemy);
早速、反映したコードを実行したところ動作確認できました。
凄く短くなりますね…
- 添付ファイル
-
MNKR_RandomEnemies9.js- (1.73 KiB) ダウンロード数: 13 回
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
Re: プラグインのレビュー依頼:敵グループのランダム化
そうそう、ご報告が漏れていました。
しぐれんさんに、敵が隠れている処理を提案された時に「全体攻撃のスキルで、単体アニメーションを再生すると隠れている敵にも再生されてしまうという問題を見たことがある」というやりとりをしました。
現状の1.6.2では、この問題は確認されなかったので、コアのバージョンアップで解消されたのか、違うプラグインでのご動作だったのかもしれません。
よって、このプラグインでは、アニメーションの問題は確認されませんでした。
しぐれんさんに、敵が隠れている処理を提案された時に「全体攻撃のスキルで、単体アニメーションを再生すると隠れている敵にも再生されてしまうという問題を見たことがある」というやりとりをしました。
現状の1.6.2では、この問題は確認されなかったので、コアのバージョンアップで解消されたのか、違うプラグインでのご動作だったのかもしれません。
よって、このプラグインでは、アニメーションの問題は確認されませんでした。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。