闘技場で戦う2体のエネミーをプレイヤーが選択肢から選んでバトルが始まる場面を想定しています。
エネミーの組み合わせ分敵グループを作成すると膨大な数になってしまうので、
変数で敵2体それぞれの敵IDを指定し、整列で場所を整えてバトルができるようなスクリプトを組むことはできないでしょうか?
または、同様の現象が再現できるような方法があれば教えていただきたいです。
viewtopic.php?t=13096
一応上記のトピックがやや近いかと思うのですが、エネミー2体以上の指定や整列の方法が分からないので、もし分かる方がいましたらよろしくお願いします。
【解決済み】エネミーの敵IDを変数で指定したい
【解決済み】エネミーの敵IDを変数で指定したい
最後に編集したユーザー なっぱ [ 2024年11月21日(木) 09:27 ], 累計 1 回
Re: エネミーの敵IDを変数で指定したい
「整列」の正確なアルゴリズムがよく分からないんですけどこんな感じですかねぇ
ツクールMVの仕様でスクリプト欄の12行制限があるのでギッチギチなんですけど
①イベントコマンド「スクリプト」-整列計算用の画像プリロードXXに1体目のエネミーIDを格納した変数ID、YYに2体目のエネミーIDを格納した変数IDを指定してください。
②イベントコマンド「スクリプト」-トループセットアップ直後に整列計算、及びエネミー追加①と同じくXXとYYの部分を書き換えてください。
③イベントコマンド「戦闘の処理」
これは普通に、エネミーを一体も配置していないトループを指定してください。
この3つを並べれば恐らく再現出来ると思います。
かなりトリッキーな処理をしているので十分なテストをしないと断言出来ませんが。
3体以上だと流石に設計から見直さないといけませんね(スクリプト欄が狭すぎて)
ツクールMVの仕様でスクリプト欄の12行制限があるのでギッチギチなんですけど
①イベントコマンド「スクリプト」-整列計算用の画像プリロード
コード: 全て選択
const [id1, id2] = [$gameVariables.value(XX), $gameVariables.value(YY)];
const [enemy1, enemy2] = [$dataEnemies[id1], $dataEnemies[id2]];
const [name1, hue1] = [enemy1.battlerName, enemy1.battlerHue];
const [name2, hue2] = [enemy2.battlerName, enemy2.battlerHue];
ImageManager.loadEnemy(name1, hue1);
ImageManager.loadEnemy(name2, hue2);
this.setWaitMode('image');
②イベントコマンド「スクリプト」-トループセットアップ直後に整列計算、及びエネミー追加
コード: 全て選択
const _temporaryMethod = this.command301;
this.command301 = function () {
_temporaryMethod.apply(this, arguments);
const [i1, i2] = [$gameVariables.value(XX), $gameVariables.value(YY)];
const [e1, e2] = [$dataEnemies[i1], $dataEnemies[i2]];
const [b1, b2] = [ImageManager.loadEnemy(e1.battlerName, e1.battlerHue), ImageManager.loadEnemy(e2.battlerName, e2.battlerHue)];
const x1 = ((Graphics.boxWidth - (b1.width + b2.width)) / 2) + b1.width / 2;
const x2 = x1 + (b1.width + b2.width) / 2;
$gameTroop._enemies.push(new Game_Enemy(i1, x1, 436));
$gameTroop._enemies.push(new Game_Enemy(i2, x2, 436));
this.command301 = _temporaryMethod;
return true; };
③イベントコマンド「戦闘の処理」
これは普通に、エネミーを一体も配置していないトループを指定してください。
この3つを並べれば恐らく再現出来ると思います。
かなりトリッキーな処理をしているので十分なテストをしないと断言出来ませんが。
3体以上だと流石に設計から見直さないといけませんね(スクリプト欄が狭すぎて)
Re: エネミーの敵IDを変数で指定したい
名無し蛙様、ありがとうございます。名無し蛙 さんが書きました:「整列」の正確なアルゴリズムがよく分からないんですけどこんな感じですかねぇ
ツクールMVの仕様でスクリプト欄の12行制限があるのでギッチギチなんですけど
①イベントコマンド「スクリプト」-整列計算用の画像プリロードXXに1体目のエネミーIDを格納した変数ID、YYに2体目のエネミーIDを格納した変数IDを指定してください。コード: 全て選択
const [id1, id2] = [$gameVariables.value(XX), $gameVariables.value(YY)]; const [enemy1, enemy2] = [$dataEnemies[id1], $dataEnemies[id2]]; const [name1, hue1] = [enemy1.battlerName, enemy1.battlerHue]; const [name2, hue2] = [enemy2.battlerName, enemy2.battlerHue]; ImageManager.loadEnemy(name1, hue1); ImageManager.loadEnemy(name2, hue2); this.setWaitMode('image');
②イベントコマンド「スクリプト」-トループセットアップ直後に整列計算、及びエネミー追加①と同じくXXとYYの部分を書き換えてください。コード: 全て選択
const _temporaryMethod = this.command301; this.command301 = function () { _temporaryMethod.apply(this, arguments); const [i1, i2] = [$gameVariables.value(XX), $gameVariables.value(YY)]; const [e1, e2] = [$dataEnemies[i1], $dataEnemies[i2]]; const [b1, b2] = [ImageManager.loadEnemy(e1.battlerName, e1.battlerHue), ImageManager.loadEnemy(e2.battlerName, e2.battlerHue)]; const x1 = ((Graphics.boxWidth - (b1.width + b2.width)) / 2) + b1.width / 2; const x2 = x1 + (b1.width + b2.width) / 2; $gameTroop._enemies.push(new Game_Enemy(i1, x1, 436)); $gameTroop._enemies.push(new Game_Enemy(i2, x2, 436)); this.command301 = _temporaryMethod; return true; };
③イベントコマンド「戦闘の処理」
これは普通に、エネミーを一体も配置していないトループを指定してください。
この3つを並べれば恐らく再現出来ると思います。
かなりトリッキーな処理をしているので十分なテストをしないと断言出来ませんが。
3体以上だと流石に設計から見直さないといけませんね(スクリプト欄が狭すぎて)
試したところ、とりあえず呼び出すことに成功しています。
使用していく中で、もし不具合などありましたらまた相談させていただくことがあるかもしれませんが、
一旦解決済みとさせていただこうと思います。とても助かりました。ありがとうございます。