全ての敵が出なくなり、自動勝利となります
conditionの値を初期化していないように見えます。
そのため、敵グループの設定を全く行わずに戦闘処理が進み、敵が誰もいないので自動勝利します。
敵グループの設定は、一度は必ず通ってほしい処理なので、do whileで書いてしまったほうが良いかもしれませんね。
全ての敵が出なくなり、自動勝利となります
Plasma Dark さんが書きました:全ての敵が出なくなり、自動勝利となります
conditionの値を初期化していないように見えます。
そのため、敵グループの設定を全く行わずに戦闘処理が進み、敵が誰もいないので自動勝利します。
敵グループの設定は、一度は必ず通ってほしい処理なので、do whileで書いてしまったほうが良いかもしれませんね。
Plasma Dark さんが書きました:動作に関して言えば問題ないと思います。
randomEnemyIdとenemyIdを上手く統合できれば一気に削れるような気がしたのですが
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)]);
コード: 全て選択
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);
Plasma Dark さんが書きました:ifによる分岐を減らしたければ、以下のように書くことは可能です。コード: 全て選択
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);
Game_Enemyに渡すべき敵IDと、隠すために使うランダム選択IDが別の存在なので、コードは短くなりますがちょっとわかりにくいかもしれません。