MotionProxyモジュール
このモジュールは、モーションを設定時にコマンドを定義するメソッドを定義したモジュールです。
モーションは、スプライトの動きを指します。
縦に移動する、回転するというような動作を記述します。
サンプル
sprite_template :human do |st|
# 中略
st.motion :default do |commands|
# MotionProxyはこのcommandsが持っているメソッドを定義しています
commands.loop true
commands.move_to_v 0, 418, 4
end
end
実行時に評価される値の指定
motionを指定する関数の引数は定義時に評価されるため、
実行時に状態に応じて処理を変えるということはそのままだとできない。
MotionProxyのメソッドの引数にProcオブジェクト(Proc.newやlambdaの返り値)が
渡されてきたときは、実行時にそのProcオブジェクトが実行される。
たとえば以下の処理ではランダムな速度で下に落ちる。
commands.velocity(0, lambda do |s|
rand(8) # ランダムな速度で下に落ちる
end)
- Procオブジェクトのブロックの第1引数はRmakeCommonSpriteのインスタンス
- Procオブジェクトのブロックの返り値がMotionProxyのメソッドの引数に渡されます
loopメソッド
モーションがループするかどうかを設定します。
# ループを有効にする
commands.loop true
# ループを無効にする
commands.loop false
- 第1引数:ループを有効にするかどうか(true/false)
move_toメソッド
指定した場所に、指定したフレーム数で移動します。
# 20フレームかけて、(x,y)=(100,50)に移動する
commands.move_to 100, 50, 20
- 第1引数:x座標
- 第2引数:y座標
- 第3引数:移動に使うフレーム数
move_to_vメソッド
指定した場所に、指定した速度で移動します。
# 1フレームあたり20の速度で、(x,y)=(100,50)に移動する
commands.move_to_v 100, 50, 20
- 第1引数:x座標
- 第2引数:y座標
- 第3引数:移動速度(1フレームあたりの移動速度)
move_byメソッド
現在位置から指定した座標分、指定したフレーム数で移動します。
move_to系メソッドとは異なり、現在位置から相対的に移動するメソッドであることに注意してください。
# 20フレームかけて、(x,y)=(100,50)だけ移動する
commands.move_by 100, 50, 20
- 第1引数:x軸の移動量
- 第2引数:y軸の移動量
- 第3引数:移動に使うフレーム数
move_by_vメソッド
現在位置から指定した座標分、指定した速度で移動します。
move_to系メソッドとは異なり、現在位置から相対的に移動するメソッドであることに注意してください。
# 1フレームあたり20の速度で、(x,y)=(100,50)だけ移動する
commands.move_by_v 100, 50, 20
- 第1引数:x軸の移動量
- 第2引数:y軸の移動量
- 第3引数:移動速度(1フレームあたりの移動速度)
velocityメソッド
スプライトの速度を設定します。
# 1フレームあたり(x,y)=(30,20)の速度に設定する
commands.velocity 30, 20
rotation_toメソッド
指定したラジアン(角度)分、指定したフレーム数で回転します。
回転の量は正の値ならば時計回りです。
# 20フレームかけて、1π(180度)の角度に向かって回転する
commands.rotation_to Math::PI, 20
- 第1引数:ラジアン(角度)
- 第2引数:回転に使うフレーム数
rotation_to_vメソッド
指定したラジアン(角度)分、指定した速度で回転します。
回転の量は正の値ならば時計回りです。
# 1フレームあたり1/2π(90度)の速度で、1π(180度)の角度に向かって回転する
commands.rotation_to_v Math::PI, Math::PI/2
- 第1引数:ラジアン(角度)
- 第2引数:回転速度(1フレームあたりのラジアン(回転角度))
rotation_byメソッド
現在の回転角度から指定したラジアン(角度)分、指定したフレーム数で回転します。
回転の量は正の値ならば時計回りです。
rotation_to系メソッドとは異なり、現在の回転角度から相対的に回転するメソッドであることに注意してください。
# 20フレームかけて、1π(180度)回転する
commands.rotation_by Math::PI, 20
- 第1引数:ラジアン(回転量)
- 第2引数:回転に使うフレーム数
rotation_by_vメソッド
現在の回転角度から指定したラジアン(角度)分、指定した速度で回転します。
回転の量は正の値ならば時計回りです。
rotation_to系メソッドとは異なり、現在の回転角度から相対的に回転するメソッドであることに注意してください。
# 1フレームあたり1/2π(90度)の速度で、1π(180度)回転する
commands.rotation_by_v Math::PI, Math::PI/2
- 第1引数:ラジアン(回転量)
- 第2引数:回転速度(1フレームあたりのラジアン(回転角度))
rotation_speedメソッド
回転速度を指定します。
回転の量は正の値ならば時計回りです。
# 1フレームあたり1/4π(45度)の速度に設定する
commands.rotation_speed Math::PI/2
scale_toメソッド
指定したサイズに、指定したフレーム数で拡大・縮小します。
# 20フレームかけて、(100,50)のサイズに拡大・縮小する
commands.scale_to 100, 50, 20
- 第1引数:幅
- 第2引数:高さ
- 第3引数:拡大・縮小に使うフレーム数
scale_to_vメソッド
指定したサイズに、指定した速度で拡大・縮小します。
# 1フレームあたり20の速度で、(100,50)のサイズに拡大・縮小する
commands.move_to_v 100, 50, 20
- 第1引数:幅
- 第2引数:高さ
- 第3引数:拡大・縮小速度(1フレームあたりの拡大・縮小速度)
scale_byメソッド
現在サイズから指定したサイズ分、指定したフレーム数で拡大・縮小します。
scale_to系メソッドとは異なり、現在サイズから相対的に拡大・縮小するメソッドであることに注意してください。
# 20フレームかけて、(100,50)のサイズだけ拡大・縮小する
commands.move_by 100, 50, 20
- 第1引数:幅
- 第2引数:高さ
- 第3引数:拡大・縮小に使うフレーム数
scale_by_vメソッド
現在サイズから指定したサイズ分、指定した拡大・縮小で移動します。
scale_to系メソッドとは異なり、現在サイズから相対的に拡大・縮小するメソッドであることに注意してください。
# 1フレームあたり20の速度で、(100,50)のサイズだけ拡大・縮小する
commands.move_by_v 100, 50, 20
- 第1引数:幅
- 第2引数:高さ
- 第3引数:拡大・縮小速度(1フレームあたりの拡大・縮小速度)
scale_velocityメソッド
スプライトの拡大・縮小速度を設定します。
# 1フレームあたり(x,y)=(30,20)の速度で拡大・縮小する
commands.scale_velocity 30, 20
- 第1引数:x軸の拡大・縮小量
- 第2引数:y軸の拡大・縮小量
wait_motionメソッド
現在設定されているモーションのすべての完了を待つメソッドです。
モーションの中にはmove_toのように完了まで数フレーム必要な命令があり、その完了を待ちます。
wait_frameメソッド
指定したフレーム数分だけ、コマンドの実行を待つメソッドです。
# 10フレーム待つ
commands.wait_frame 10
proc_callメソッド
モーションをコマンドのリストではなく、プログラムで制御したい場合に使うメソッドです。
本モジュールで使うことができるメソッド(move_to)で制御するよりも低速ですが、自由度が高いため複雑な制御をする場合に使うと良いでしょう。
commands.proc_call do |sprite|
# ここにrubyコードを記述します
end