イベントコマンドの選択肢の表示で最大6個の選択肢を表示できますが、選択肢の内容をスイッチ等の要素から可変にすることができません。
特定のスイッチがONの場合に選択肢を増やす場合は、別の選択肢を用意し条件分岐することにより実現しますが、分岐が多くなるとコードや設定が煩雑になります。
そこで、今日はイベントコマンドのスクリプトでスイッチの値から選択肢の内容を可変にする方法についてまとめていきます。
Table of Contents
確認環境
RPGツクールMV Version 1.6.2
イベントの内容
スイッチと変数をそれぞれ6個使用します。
イベントの内容は以下の画像の通りになります。
解説
1つ目のスクリプト
for(var i = 1; i <= 6; i++)
$gameVariables.setValue(i, "");
では、表示する選択肢を格納するための変数の初期化を行っています。
変数の1番から6番を使用していますが、その他の番号を使用する場合、例えば変数の100番から106番を使用する場合は100と106にそれぞれ変更します。
2つ目のスクリプト
var choiceArray = ["A", "B", "C", "D", "E", "F"];
var choicedArray = [];
for(var i = 1; i <= 6; i++)
if($gameSwitches.value(i))
choicedArray.push(choiceArray[i - 1]);
this.setupChoices([choicedArray,0,0,2,0]);
this.setWaitMode('message');
for(var i = 1; i <= choicedArray.length; i++)
$gameVariables.setValue(i, choicedArray[i - 1]);
では、スイッチがONになっている場合選択肢を追加しています。
最初の変数choiceArrayに選択肢の内容を設定。
for(var i = 1; i <= 6; i++)
if($gameSwitches.value(i))
choicedArray.push(choiceArray[i - 1]);
の部分でスイッチの1番から6番でONのものに対応する選択肢がchoicedArrayに追加されていき、選択肢の表示にはchoicedArrayを使用しています。
for(var i = 1; i <= choicedArray.length; i++)
$gameVariables.setValue(i, choicedArray[i - 1]);
の部分では選択肢の内容を変数に格納しています。
先ほどのスクリプトで使用する変数の番号を1から変更した場合はその値と同じ値をi + 1の部分の1に置き換えます。
3つ目のスクリプト
var label = $gameVariables.value(this._branch[this._indent] + 1);
for (var i = 0; i < this._list.length; i++) {
var command = this._list[i];
if (command.parameters[0] === label) {
this.jumpTo(i);
}
}
では、選択肢を選んだ後に、選ばれた選択肢の内容と同じラベルにジャンプする処理を行っています。
先ほどのコード同様に、使用する変数の番号を1から変更した場合はその値と同じ値をthis._branch[this._indent] + 1の部分の1に置き換えます。
以降は通常のイベントコマンドのみで、選択肢に設定した値と同じラベルを用意しておくと、選択されたラベルにジャンプします。
まとめ
今日はスクリプトからスイッチの値によって可変の選択肢を作成する方法についてまとめました。
イベントコマンドのみでも実現可能ですが、コードが長くなってしまいがちな部分かと思いますので、よろしければこちらの方法をご検討ください。
それではここまでお読みいただきありがとうございました。
たいへん役立つ情報ありがとうございます! MZでも動作しました。
MZでの動作確認となりますが、使用する変数を1~6から変えた場合についての
記載の間違いを見つけたのでご報告します。
●変更が必要な場所は
1つめのスクリプト
・i = 1; i <= 6; の数値
2つめのスクリプト
・i = 1; i <= 6; の数値
・(i + 1ではなく) [i – 1]の数値(2つある[i – 1]の1箇所目のみ)
3つ目のスクリプト
・変更の必要なし
($gameVariables.value(this._branch[this._indent] + 1))の数値を変えるとラベルにジャンプしませんでした)
となりました。ご確認頂ければ幸いです。
コメントありがとうございます!
返信が遅くなりまして申し訳ございません。
記事の誤りについてもご指摘いただきありがとうございます。
見直してみて説明も煩雑でわかりにくいため、併せていずれ全体的に書き直しておきたい所です。
少しでも参考になったようであれば何よりです。
ありがとうございました!