【解決済み】スクリプトを使った条件分岐の使い方

返信する
無名のぬ
記事: 9
登録日時: 2022年9月24日(土) 15:27

【解決済み】スクリプトを使った条件分岐の使い方

投稿記事 by 無名のぬ »

条件分岐、変数5番目スイッチがオフになっている
時にイベントが発生するようにしたくてスクリプトを組みました。
(複雑なものは無理なので条件を満たした時のみスイッチをONにするもので対応)
Wikiとか見てスイッチに関する条件分岐を真似て

if($gameSwitches.value(4)){
//(処理)
}

を変形し

if($gameSwitches.value($gameVariables.value(5),false)){
//($gameSwitches.setValue(299,true))
}

というものを作ったのですがどうにも反応しなかったです。
どこが間違ってるのかご指導お願いします。
一番簡単な奴を作って試しても駄目だったのでかなり初歩の部分で見落としがありそうなのですが
最後に編集したユーザー 無名のぬ [ 2022年10月15日(土) 00:07 ], 累計 1 回
アバター
Plasma Dark
記事: 731
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: スクリプトを使った条件分岐の使い方

投稿記事 by Plasma Dark »

スクリプトそのものに致命的な間違いはなさそうです。($gameSwitches.valueの引数はひとつだけですが)

ひとまず、変数の値に応じて参照するスイッチを変えたい、そのスイッチの状態によって条件分岐したいということだったので、簡単なサンプルイベントを作ってみました。

コード: 全て選択

◆注釈:前提となる変数とスイッチの設定
◆変数の操作:#0015 スイッチID = 10
◆スイッチの操作:#0010 参照するスイッチ = ON
◆注釈:イベントコマンドで分岐処理を行う
◆条件分岐:スクリプト:$gameSwitches.value($gameVariables.value(15))
  ◆スイッチの操作:#0011 条件を満たした際にONにしたいスイッチ = ON
  ◆
:分岐終了
◆注釈:スクリプトで分岐処理を行う
◆スクリプト:if ($gameSwitches.value($gameVariables.value(15))) {
:     :  $gameSwitches.setValue(11, true);
:     :}
◆条件分岐:条件を満たした際にONにしたいスイッチがON
  ◆文章:なし, なし, ウィンドウ, 下
  :  :スイッチ切替成功
  ◆
:それ以外のとき
  ◆文章:なし, なし, ウィンドウ, 下
  :  :スイッチ切替失敗
  ◆
:分岐終了
条件分岐をイベントコマンドで行うパターンも一応書いていますが、スクリプトの中で分岐する処理とどちらが都合が良いかで使い分けてください。
あまり複雑な処理をイベントコマンドのスクリプトで書くとメンテナンスしにくくなるので、ある程度複雑な処理を書きたい場合はプラグインコマンドの作成を推奨します。
無名のぬ
記事: 9
登録日時: 2022年9月24日(土) 15:27

Re: スクリプトを使った条件分岐の使い方

投稿記事 by 無名のぬ »

Plasma Dark 様
回答ありがとうございます。
第一関門は突破して概ね出来たのですが、スイッチ○○がOFFの時の条件分岐に変更したいんですがどうにかならないでしょうか?
作っているのがスキルひらめきのイベントなのでスキルフラグがない=スイッチOFF の場合にのみ発生する
という作りでOFFの場合分けが出来るかどうかが鍵になってます。
あと一歩なんですが,falseを色々くっつけてもうまくいきませんでした。↓のです。

if ($gameSwitches.value($gameVariables.value(5,false))) {
$gameSwitches.setValue(299, true);
}
アバター
Plasma Dark
記事: 731
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: スクリプトを使った条件分岐の使い方

投稿記事 by Plasma Dark »

動かして試してみるのも大事ですが、動いた場合、どうしてそれで正しく動くのかを知ることも大切です。

コード: 全て選択

if (式) {
  処理
}
このコードは、式を評価した結果がtruthy(今回の例ではtrue)であれば{}内の処理を実行します。
https://developer.mozilla.org/ja/docs/W ... /if...else

$gameSwitches.value(スイッチID) は、引数で渡されたIDを持つスイッチの状態を真偽値 (ONの場合true、OFFの場合false)で返す関数です。
この処理は rmmz_objects.js の Game_Switches.prototype.value に記述されていますが、すぐに読んで構造を理解するのは難しいと思うので、今はそういうものである、と受け入れてしまって良いと思います。

つまり、

コード: 全て選択

if ($gameSwitches.value(スイッチID)) {
  処理
}
と記述した場合、まず $gameSwitches.value(スイッチID) が評価され、その結果がtrueである場合(指定したスイッチがONである場合)に分岐の条件が満たされ、処理を実行します。

これの逆の判定、スイッチがOFFであるかどうかを判定したい場合には、論理否定を使います。
https://developer.mozilla.org/ja/docs/W ... ogical_NOT

コード: 全て選択

if (!$gameSwitches.value(スイッチID)) {
  処理
}
!$gameSwitches.value(スイッチID) の評価結果は、指定したスイッチがONの場合にfalse, OFFの場合にtrueになります。
スイッチIDに変数の値を用いたいので、 $gameVariables.value(変数ID) を使って書くとこうなります。

コード: 全て選択

if (!$gameSwitches.value($gameVariables.value(変数ID))) {
  処理
}
無名のぬ
記事: 9
登録日時: 2022年9月24日(土) 15:27

Re: スクリプトを使った条件分岐の使い方

投稿記事 by 無名のぬ »

Plasma Dark様回答ありがとうございます。
帰宅後すぐに試してみてうまくいきました。
JSというかプログラム言語ド初心者なものですごく初歩で躓いてましたね。
論理否定とif...else文は覚えます。

↓一応の完成版

if (!$gameSwitches.value($gameVariables.value(3))) {
$gameSwitches.setValue(299, true);
}

追記 おかげさまで作りたかったイベント(スキルひらめき判定)が動作テスト含め出来上がりました。本当にありがとうございました。
返信する

“MZ:質問”に戻る