敵キャラのHP増減 / ツクールVXAceスクリプト(RGSS3)wiki
ツクールVXAceで敵キャラのHP増減をスクリプトで行うなら以下の通りです。
$game_troop.members[敵ID].hp += 増減する値
サンプルコード(モンスター1のHPを15減らす)
$game_troop.members[0].hp += -15
#または
$game_troop.members[0].hp -= 15
上下の式は同じ意味を持ちます。
「=」にすることによって値を代入することも出来ます。
サンプルコード(モンスター1のHPを15にする)
$game_troop.members[0].hp = 15
または以下の通りです。
value = operate_value(増減, 定数か変数か, 値)
#増減 0:増やす 1:減らす
#定数か変数か 0:定数 1:変数
#値 定数のときは定数を、変数のときは変数IDを入力
iterate_enemy_index(敵ID) do |enemy| #敵ID=-1以下で敵グループ全体
return if enemy.dead? #敵がすでに戦闘不能だった場合はここで中断
enemy.change_hp(value, 戦闘不能を許可するか)
#true:戦闘不能を許可 false:戦闘不能を禁止
if enemy.dead?
enemy.perform_collapse_effect
end
end
サンプルコード(モンスター1のHPを15減らす、戦闘不能を許可)
value = operate_value(1, 0, 15)
iterate_enemy_index(0) do |enemy|
return if enemy.dead?
enemy.change_hp(value, true)
if enemy.dead?
enemy.perform_collapse_effect
end
end
コード解説
上記の例で、長いコードはイベントコマンドで行うのと同じ方法です。
短いコードの例でも敵のHPの増減は問題なく行われますが、敵のHPが0になった際のアニメーションは行われません。
長いコードの方は様々なシチュエーションに対応するために長くなっているのです。
慣れないうちは長い方を使うことをお勧めします。
1行目:value = operate_value(増減, 定数か変数か, 値)
ここではイベントスクリプトで行うことを想定しているので、なるべく行の長さが短くなるようにvalueという変数にoperate_valueの計算結果を代入しています。
このoperate_valueメソッドですが、単に増減する値(または変数)を返すだけなので、4行目に直接値を入れることで省略可能です。
2~8行目:iterate_enemy_index(0) do |enemy| ~ end
独特な記法ですが、これはブロックと呼ばれるもので、doの前の要素の数だけ| |内を変数としてendまで処理を繰り返すという意味になります。
興味のある方は「Ruby ブロック」と検索してみて下さい。
ここではiterate_enemy_indexメソッドで取得した敵のデータの数だけ{}内の処理を繰り返すという意味合いです。
idが0以上であれば対象の敵は単体のため、do~endを行う必要はないのですが、-1だった場合は敵全体を指すため、敵の数だけ処理を繰り返す必要が出てくるのです。
こうした想定があるため、わざわざ繰り返しの中で処理を行っているのです。
3行目:return if enemy.dead?
対象の敵が戦闘不能だった時には以下の処理は無駄になるため、その場合はここで処理を止めるようにしています。
returnを使用することによって不用意な処理を止めることが出来ます。
4行目:enemy.change_hp(value, 戦闘不能を許可するか)
敵のHPを増減させるだけならこの行のみでokです。
"change_hp"とあるように敵のHPからvalueパラメータで指定した値を増減させます。
"戦闘不能を許可するか"パラメータではtrueを入れて戦闘不能を許可していた場合は計算結果が0以下だったときはHPを0にしますが、falseを入れて許可しなかった場合はHPには1が代入されます。
5~7行目:if enemy.dead?
敵のHPを増減させた結果敵のHPが0になっていた時は崩壊アニメーションを表示させる必要があります。
このif文は上で行った計算の結果、敵のHPが0だった場合は崩壊アニメーションを表示させるようにしています。
6行目:enemy.perform_collapse_effect
"perform_collapse_effect"というメソッド名の通り、ここで敵のバトラー画像をアニメーションさせて消しています。
ある程度決まった場面で使用されるなら最低限以下のコードであれば、通常通りの処理がなされます。
enemy.change_hp(value, true)
enemy.perform_collapse_effect if enemy.dead?
ツクールVXAceスクリプトリファレンスwikiトップページへ戻る
オリジナルシステムなどの製作依頼・相談があればプラグイン・マップ等個別製作依頼のページまでお願いします。