2014-04-13

RGSS-バトラーアニメーション

ShareLink
«RGSS一覧

このスクリプトは簡単に言うと


戦闘中、バトラーが動きます。


動かないキャラだけの戦闘画面にはもう飽きた(・ω・`)
なんて人にはもってこいかも???

今回紹介するのは
・待機(息づかい)
・通常攻撃
・スキル使用
・被ダメージ
・勝利時

でのアニメです。

キャラ&エネミーごとにボイスを付けることもできます。
(ボイスの付け方は最後の方に記載)


※用意するエネミーの絵数が多いと、容量の問題やグラフィック準備の手間などの事情によりオススメできません。素材準備の段階でエターナる恐れがありますので、完成させる強い意志が必要になります!
…とりあえず制作頑張りましょう!!!


【今回の変更点】
・Sprite_Battler
・Scene_Battle 4



グラフィック準備


歩行キャラと同様に
バトラーもひとつのファイルに複数のパターンを用意。

120×120pxのバトラーなら、
ひとつの用途のアニメで4パターンの動きがあるとすれば
480×120pxの大きさになります。
攻撃時、ダメージ時などの複数の用途がある場合は
それと同じように縦にパターンを増やします。

まずはスクリプトを書いて、歩行キャラをバトラーフォルダに入れて試してみよう!
基本横4パターンで解説。


勝利時バトラーアニメ準備


■Scene_Battle 1

def main
$winner = false 追加

■Scene_Battle 2

def start_phase5 $winner = true 追加

通常攻撃/スキル使用時アニメ準備


■Game_Battler 1

公開インスタンス
attr_accessor :attack_action
attr_accessor :skill_action
 追加
オブジェクト初期化
@attack_action = false
@skill_action = false
 追加

■Scene_Battle 4

def make_basic_action_result
「対象側バトラーの配列を設定」の次あたり
@active_battler.attack_action = true 追加
def make_skill_action_result
「ステータスウィンドウをリフレッシュ」の下あたり
@active_battler.skill_action = true 追加



ここからが本番(`・ω・´)qm



■Sprite_Battler

「オブジェクト初期化」initializeに以下を追加
# 待機アニメ用
@r_anime_count = 0
@r_pattern = 0
# 攻撃/スキル/ダメージ用
@anime_count = 0
@pattern = 0
@damage_anime = false

ループする待機アニメと、しないアニメで変数を使い分ける。
def update
「ファイル名か色相が現在のものと異なる場合」
if @battler.battler_name != @battler_name or …
のwidthとheightを下記のように変更
@width = bitmap.width / 横パターン数
@height = bitmap.height / 使う縦パターン数
self.src_rect.set(0, 0, @width, @height)


歩行キャラならパターン数はどちらも4となります。
src_rectで初期に表示されるパターンは一番左上。
別の用途パターンにしたい時はyに@height * 2というように入れます。
一応書いておきますが…
"@height"の記述だけにすると用途2パターン目(歩行キャラなら左向き)
が表示されます。

以下は
「可視の場合」if @battler_visible の中に記述。

「ダメージ」
被ダメージ時のアニメを実行するか否かの変数を操作。
回避の表示が"Miss"ではない場合は変更してください。
if @battler.damage_pop
if @battler.damage != "Miss" and @battler.damage > 0
  @damage_anime = true
 end

end

これはダメージを受けた際のアクションなので
逆に回復した時にアクションを追加したい際は
@battler.damage > 0 の符号を < に変えて記述します。
0は含まれないのでダメージ0の時は何もアクションしません。

この丁度下あたりに追加
# ダメージアニメ
if @damage_anime
 @anime_count += 1
 # パターンが最後尾ならウェイト
 if @pattern == 3
  # countが20になったらアニメ終了
  if @anime_count == 20
   @anime_count = @pattern = 0
   self.src_rect.set(0, 0, @width, @height)
   @damage_anime = false
  end
 # この数値でアニメ速度を調整
 elsif @anime_count > 2
  @pattern += 1
  self.src_rect.set(@pattern * @width, @height * 縦パターン, @width, @height)
  @anime_count = 0
 end
 return
end


通常攻撃アニメとスキル使用時アニメなどもダメージアニメと同様。
if @damage_anime 部分を
if @battler.attack_action か
if @battler.skill_action に変更して
@damage_anime = false を
@battler.attack_action = false か
@battler.skill_action = false に変えるだけ。

# 戦闘勝利時に勝利用バトラーグラフィックに変更
# ※「バトラー名_win.拡張子」のグラフィックを用意
if @battler.is_a?(Game_Actor) and $winner
 self.bitmap = RPG::Cache.battler("#{@battler.battler_name}_win", 0)
 @anime_count += 1
 # パターンが最後尾ならウェイト
 if @pattern == 3
  # countが20になったらアニメ終了
  if @anime_count == 20
   @anime_count = @pattern = 0
   self.src_rect.set(0, 0, @width, @height)
   @damage_anime = false
  end
 # この数値でアニメ速度を調整
 elsif @anime_count > 2
  @pattern += 1
  self.src_rect.set(@pattern * @width, 0, @width, @height)
  @anime_count = 0
 end
 return
end


リターンしなかった場合には待機アニメーションをするように
最後に待機アニメのスクリプトを追加します。
# 待機アニメ
@r_anime_count += 1
if @r_pattern == 3
 if @r_anime_count == 10
  @r_anime_count = @r_pattern = 0
  self.src_rect.set(0, 0, @width, @height)
 end
# この数値でアニメ速度を調整
elsif @r_anime_count > 6
 @r_pattern += 1
 self.src_rect.set(@r_pattern * @width, 0, @width, @height)
 @r_anime_count = 0
end


これを応用してアイテム使用や様々なシーンに
バトラーをアニメさせることが可能です。



♬♪ ボイスの付け方 ♪♬


■Sprite_Battler


ダメージ時のバトラーボイスは
@damage_anime = true
の、アニメ実行記述の直後に記述。

if @battler.is_a?(アクターならGame_Actor、エネミーならGame_Enemy)
 case @battler.id
 when 1
  Audio.se_play("Audio/SE/ボイス1", 音量, ピッチ)
 when 2
  Audio.se_play("Audio/SE/ボイス2", 音量, ピッチ)
 end
end


■Scene_Battle 4


行動時のバトラーボイスは
@battler.attack_action = true
の、アニメ実行記述の直後に記述。

if @active_battler.is_a?(アクターならGame_Actor、エネミーならGame_Enemy)
 case @active_battler.id
 when 1
  Audio.se_play("Audio/SE/ボイス1", 音量, ピッチ)
 when 2
  Audio.se_play("Audio/SE/ボイス2", 音量, ピッチ)
 end
end


を追加。
音量・ピッチは省略しても大丈夫です。
それぞれキャラのIDで判定しており、
上記のように when には ID番号 を入れます。
ボイスを付けたいキャラのIDのwhenを追加するだけです。

ランダムにボイスを変化させたい場合は
se_playの部分を下記のように変更。

変数 = rand(分岐数-1)
case 変数
when 0
 Audio.se_play("Audio/SE/ボイス1")
when 1
 Audio.se_play("Audio/SE/ボイス2")
 :
end

というように条件分岐させるといいでしょう。
※乱数は0を含んでランダムな数を決定するので分岐数から-1の数を設定。


静止画でグラフィックを一時的に変更するだけなら
このスクリプトのアニメ部分(パターン)の記述を除いて、
画像変更・カウントだけを残して組み込めばOK。

静止画で動きをつけた方が容量の問題などもスマートにできるかも…



★このスクリプトを使った関連作品


category: