敵キャラのステート変更 / ツクールMVスクリプトリファレンスwiki
ツクールMVで敵キャラのステート変更をスクリプトで行うなら以下の通りです。
this.iterateEnemyIndex(敵ID, function(enemy) {
enemy.addState(ステートID)
enemy.clearResult()
})
敵IDについては負の数で敵全体が対象となり、0から1番目の敵IDとなります。
サンプルコード1(敵IDが1の敵のステートを毒に変更)
this.iterateEnemyIndex(0, function(enemy) {
enemy.addState(4)
enemy.clearResult()
})
戦闘不能のステートを付加するときは以下のようになります。
サンプルコード2(敵IDが1の敵に戦闘不能のステートを付加)
this.iterateEnemyIndex(0, function(enemy) {
var alreadyDead = enemy.isDead()
enemy.addState(1)
if (enemy.isDead() && !alreadyDead) {
enemy.performCollapse()
}
enemy.clearResult()
})
コード解説
1行目:this.iterateEnemyIndex(敵ID, function(enemy) {
"iterateEnemyIndex"メソッドは対象が敵全体か、敵単体かを判別し、処理(ここではステート変更)を行うメソッドです。
もし、全体を対象とするのか、単体を対象にするのか決まっている場合は以下ようなコードでも可能です。
//敵単体を対象とする場合
$gameTroop.members()[敵ID].addState(ステートID)
//敵全体を対象とする場合
$gameTroop.members().forEach(function(enemy){
enemy.addState(ステートID)
});
敵全体を対象とした時のコード量はあまり変わりませんが、単体を対象とする時は1行で済むため、単体のみを対象とする時はこちらを使用した方が良いでしょう。
"function(enemy)"では対象に実行する処理を指定しています。
"function"とは処理の塊を表し、enemyはここで使用されるパラメータで、対象とする敵のデータが格納されます。
このenemyというのは変数のため、お好きな名前(tekiやbossなど半角英数字)に設定することも可能です。
見やすさを優先したため、function後の"{"で改行していますが、塊としては"function(enemy){処理}"となります。
2行目:enemy.addState(ステートID)
"addState"メソッドは指定したキャラクターに指定したステートを付加するというものです。
敵IDが0以上であれば指定したID-1の敵を、負の数であれば敵の数だけ繰り返して敵全体に"addState"メソッドが適応されます。
3行目:enemy.clearResult()
"clearResult"メソッドでは指定したIDのキャラクターに実行された結果を初期化しています。
この記述は1ターンの実行内容にそのキャラクターに対して連続してステートの付加・解除があった場合にその結果を正確に反映するために必要です。
確実にステートの付加・解除が1度のみと断定できる場合のみこの記述は省略可能です。
複数回の付加・解除がある場合にこの記述がないと処理途中のステートとなってしまいます。
戦闘不能以外の処理の場合は以上でokですが、戦闘不能のステートを処理したい場合、上記の例にもあるように少しコードが異なります。
サンプルコード2、2行目:var alreadyDead = enemy.isDead()
ここでは"alreadyDead"という名の変数に指定した敵が戦闘不能かどうか(戦闘不能だったらtrue、戦闘不能でなかったらfalse)を代入しています。
"isDead()"というメソッドは指定したキャラクターが戦闘不能でないかどうかを調べて結果を返すメソッドです。
戦闘不能ステートを含む様々なステートが付加されることが予期される場合この行は"addState"メソッドよりも前に持ってくる必要があります。
つまりステートをスクリプトによって付加する前の状態を取得しているのです。
サンプルコード2、4,6行目:if (enemy.isDead() && !alreadyDead) {…}
このif文の意味は「新たにステートを付加する前に戦闘不能でなく、かつ戦闘不能が付加された場合」というものです。
つまり、その条件がそろったときのみこの次の行のバトラーピクチャの崩壊表現を行うということです。
サンプルコード2、5行目:enemy.performCollapse()
"performCollapse"は敵キャラクターが戦闘不能になった際の崩壊表現を実行するメソッドです。
サンプルコード2では戦闘不能とその他のステートを判別する例をみせるため、4,6行目にif文を入れましたが、戦闘不能にしかなりえなく、かつ戦闘不能でない敵しかターゲットになりえない場合はこのif文は必要ありません。
ツクールMVスクリプトリファレンスwikiトップページへ戻る
オリジナルシステムなどの製作依頼・相談があればプラグイン・マップ等個別製作依頼のページまでお願いします。