ページ 11

複数の中から一つでも当てはまれば正を返す方法

Posted: 2017年9月02日(土) 01:48
by hogehoge
重ね重ね質問すみません。
敵グループの名前を全て取得し、その中で「別の変数に収納してある名前」にどれか一つでも一致するものがあれば正の値を返す動作をさせたいのですが、うまく行きません。

念のため、エラーの出るイベント構成ですが、自分で解決しようとしたものを乗せておきます。
文章は正の値がでた時のための確認メッセージです。

コード: 全て選択

◆変数の操作:#0021 今の敵キャラID1体目 = $gameTroop.members()[0] ? $gameTroop.members()[0].originalName() : '';
◆変数の操作:#0022 今の敵キャラID2体目 = $gameTroop.members()[1] ? $gameTroop.members()[1].originalName() : '';
◆変数の操作:#0023 今の敵キャラID3体目 = $gameTroop.members()[2] ? $gameTroop.members()[2].originalName() : '';
◆変数の操作:#0024 今の敵キャラID4体目 = $gameTroop.members()[3] ? $gameTroop.members()[3].originalName() : '';
◆変数の操作:#0025 今の敵キャラID5体目 = $gameTroop.members()[4] ? $gameTroop.members()[4].originalName() : '';
◆条件分岐:スクリプト:[$gameTroop.members().originalName()].contains($gameVariables.value(21))
  ◆文章:なし, ウィンドウ, 下
  :  :今の
  :  :\V[21],\V[22],\V[23],\V[24],\V[25]
  :  :前の
  :  :\V[26],\V[27],\V[28],\V[29],\V[30]
  ◆
:それ以外のとき
  ◆条件分岐:スクリプト:[$gameTroop.members().originalName()].contains($gameVariables.value(22))
    ◆文章:なし, ウィンドウ, 下
    :  :今の
    :  :\V[21],\V[22],\V[23],\V[24],\V[25]
    :  :前の
    :  :\V[26],\V[27],\V[28],\V[29],\V[30]
    ◆
  :それ以外のとき
    ◆条件分岐:スクリプト:[$gameTroop.members().originalName()].contains($gameVariables.value(23))
      ◆文章:なし, ウィンドウ, 下
      :  :今の
      :  :\V[21],\V[22],\V[23],\V[24],\V[25]
      :  :前の
      :  :\V[26],\V[27],\V[28],\V[29],\V[30]
      ◆
    :それ以外のとき
      ◆条件分岐:スクリプト:[$gameTroop.members().originalName()].contains($gameVariables.value(24))
        ◆文章:なし, ウィンドウ, 下
        :  :今の
        :  :\V[21],\V[22],\V[23],\V[24],\V[25]
        :  :前の
        :  :\V[26],\V[27],\V[28],\V[29],\V[30]
        ◆
      :それ以外のとき
        ◆条件分岐:スクリプト:[$gameTroop.members().originalName()].contains($gameVariables.value(25))
          ◆文章:なし, ウィンドウ, 下
          :  :今の
          :  :\V[21],\V[22],\V[23],\V[24],\V[25]
          :  :前の
          :  :\V[26],\V[27],\V[28],\V[29],\V[30]
          ◆
        :分岐終了
        ◆
      :分岐終了
      ◆
    :分岐終了
    ◆
  :分岐終了
  ◆
:分岐終了
◆変数の操作:#0026 前の敵キャラID1体目 = $gameTroop.members()[0] ? $gameTroop.members()[0].originalName() : '';
◆変数の操作:#0027 前の敵キャラID2体目 = $gameTroop.members()[1] ? $gameTroop.members()[1].originalName() : '';
◆変数の操作:#0028 前の敵キャラID3体目 = $gameTroop.members()[2] ? $gameTroop.members()[2].originalName() : '';
◆変数の操作:#0029 前の敵キャラID4体目 = $gameTroop.members()[3] ? $gameTroop.members()[3].originalName() : '';
◆変数の操作:#0030 前の敵キャラID5体目 = $gameTroop.members()[4] ? $gameTroop.members()[4].originalName() : '';

Re: 複数の中から一つでも当てはまれば正を返す方法

Posted: 2017年9月02日(土) 07:21
by しぐれん
members().some()を使ってみましょう。
この関数は、判定用の関数を引数として渡し、一つでも条件を満たせばtrueを返します。
おそらく、イベントコマンドで組むよりもプラグインを自作する方がスマートに解決できると思います。
それと文字列の比較は重い処理なので、enemyIdとの比較で可能ならそちらを使うことをお勧めします。

コード: 全て選択


var name ='何か'
var result =$gameTroop.members().some(function(enemy){
  return enemy.originalName()===name;
}
)
if(result){
//実行したい処理
}

Re: 複数の中から一つでも当てはまれば正を返す方法

Posted: 2017年9月02日(土) 12:52
by hogehoge
返信ありがとうございます!
私はスクリプトを組めるほどの知識と能力が無いので、難しいかなと…
いただいたコードを元にスクリプトを組み直した結果、うまくいきました!ありがとうございます!