2014-10-11

RGSS-震えモーション

ShareLink
«RGSS一覧

ガクガクブルブル((゜д゜|||))というように、キャラクターが震える動きを付けたい時にわざわざ震え専用の歩行キャラクターを作るのも、使うキャラクターの数が増えるほど手間がかかるしサイズも増えてしまいますよね。

なので、今回はガクブルをスクリプトで表現させちゃいましょう!



【今回の変更点】
・Game_Player



■Game_Player

まずはここでガクブルさせた際に、一緒に画面が移動しないように判定させます。
プレイヤーキャラクター以外には影響はないので、プレイヤーをガクブルさせない場合は必要ありません。

「def update」
last_real_x = @real_x
last_real_y = @real_y
super

この下を以下のようにunlessで囲みます。

unless @shake
 if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
  $game_map.scroll_down(@real_y - last_real_y)
 end
 if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
  $game_map.scroll_left(last_real_x - @real_x)
 end
 if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
  $game_map.scroll_right(@real_x - last_real_x)
 end
 if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
  $game_map.scroll_up(last_real_y - @real_y)
 end

end

@shakeがtrueの時のみ、画面は動きません。
インスタンス変数にしているのは移動ルート以外では使用しないためです。


あとはイベントコマンドの「移動ルートの設定」に組み込むだけです。
主に「スクリプト」とウェイトを使用します。

スクリプト : @shake = true
スクリプト : @x -= 0.1
ウェイト : 1フレーム
スクリプト : @x += 0.1
ウェイト : 1フレーム
(必要な分だけ+-繰り返し)
スクリプト : @shake = false


移動ルートの対象がプレイヤー以外なら @shake の記述は必要ありません。
幅は1以上にしてしまうと一歩分動いてしまうので、0.1~0.5くらいが丁度いいかもしれません(・ω・)
0.1だと小刻みに揺れますが、場面によって使い分けるといいでしょう。
位置を元の場所に戻すのを忘れないようにプラスマイナス同じ分だけ動かします。

振動させる幅を後で変更するのは、ポチポチと面倒かと思いますので
@vib = 0.1
という適当な変数に振動幅(例では0.1)を書いて
@x += @vib
と記述しておくと、変更する点は@vibだけになるので便利です。
コピペで汎用する場合も楽です(・v・)レッツトライ!



意外とガクブルさせる表現、使えますよねぇ~~(*´ω`*)
キャラが恐怖を感じる場面や、縛られて身動きができない場面、タンスの引き出しやドアが開かない時、重たい斧を引き抜くような「ふんぬぬぬぅ~~~!=3」という力を込めるような場面でも。
横だけ、縦だけでなく、@x と @y を併用して複雑な動きをとらせる事もできるので
怪しいダンス(?)などの細かい動きもこれで表現できるようになりますぞ!



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

category: