イベント処理
add_event(イベント・タイプ){イベント発生時の処理}
引数(イベント・タイプ)が発生した時に、後ろの処理を行います
イベント・タイプには次のようなものがあります
| イベント・タイプ |
条件 |
| :mouse_button_down |
マウス・ボタンを押したとき |
| :mouse_button_up |
マウス・ボタンを離したとき |
| :mouse_motion |
マウスを動かしたとき |
| :key_down |
キーボードを押したとき |
| :key_up |
キーボードを離したとき |
キー入力
押されている間は反応
上のイベント処理では、「キーが押されたこと」は分かっても、「何が押されたか」は分かりません
なので、キーの検出には次のメソッドを使います
key_pressed?(Key::キー定数)
設定したキー定数が押されたときにtrueを返します
キー定数には次のものがあります
| キー定数 |
対応キー |
| ESCAPE |
エスケープ |
| SPACE |
スペース |
| K0~K9 |
0~9 |
| A~Z |
a~z |
| UP |
↑ |
| DOWN |
↓ |
| RIGHT |
→ |
| LEFT |
← |
押された瞬間のみ反応
Wave.playなどは、上のメソッドを使うとエラーが起こります(理由は講座資料を参照)
よって、新規に押されたキーを検出する必要があります
new_key_pressed?(Key::キー定数)
キーが押されて無い状態から、押された状態に切り替わった瞬間だけtrueを返します
メイン・ループ
基本ループ
自分でループ処理を書く場合、次のようにします
main_loop do
ループ内の処理
end
do~endの間で「描画等の処理 → 破棄 →再描画」を繰り返します
例
main_loop do
Image.render("sample.bmp")
end
オブジェクトを使ったループ
Image.newのようなオブジェクト化は、メイン・ループの外で行わなければなりません
つまり
img = Image.new("sample.bmp")
main_loop do
img.render
end
こうなるわけです
ループの周期
デフォルトでは、、1秒間に60フレーム(回)のループ処理が行われますが、
この周期は変更が出来ます
main_loop(30) do
ループ内の処理
end
「main_loop」の後ろに、ループ周期を指定します
(注)ループ回数が多いほど、処理落ちが発生しやすくなります
アニメーション
まずはこの画像を見てください
思い切り拝借品ですが、今回はこれを使って、3カウントを取りたいと思います
画像サイズの設定
今回の画像は1パターン「100×100」ドットなので、画像の描画サイズを
「100×100」に設定します
img = Image.new("animation.bmp", :w => 100, :h => 100
アニメーションの設定
アニメーション機能を使うには、アニメーション・パターンを登録する必要があります
その際、画像オブジェクトに対して「add_animation」メソッドを使います
img.add_animation(:roll => [20, [0,1,2] ])
:rollはアニメーションの名前で、:roll以外の名前でも問題ありません
その後ろに切り替え時間(フレーム)とパターン番号を列挙します
(パターン番号は、左上から順に設定したサイズ分画像を取って、取れなくなった時点で1段下がってまた左順に取って行きます)
パターンのフォーマットは、次のようなルールになっています
[切り替え時間, [パターン1, パターン2・・・], ジャンプ先(省略可)]
複数のアニメーション・パターンがある場合、それぞれのアニメーションにジャンプ出来ます
ジャンプ先(アニメーションの名前)を設定すると、アニメーション再生後に設定したアニメーションを続けて再生出来ます
ジャンプ先を省略すると、今のアニメーションを繰り返し再生します
アニメーションの開始
それでは、登録したアニメーションを再生させましょう
再生には「start_animation」メソッドを使います
img.start_animation :roll
前に使った画像オブジェクト、後ろにアニメーションの名前を渡します
なお、アニメーションには「update」メソッドが必須です
img.update
これがメイン・ループ内に無いと、アニメーションが更新(正常作動)されません
もちろん、img.renderも忘れずにupdateの下に書き加えてください
今回のアニメーションはジャンプ先を設定していないので、20フレーム毎に「1,2,3,1,2,3・・・」を繰り返します
なお、アニメーションメソッドはメイン・ループの外で定義してください
メソッド
メソッドの定義
さて、ここまで来ると「オリジナルのメソッドが欲しいな」と思う頃です
Rubyでのメソッドの定義はこのように行います
def メソッド名(引数)
メソッドが行う処理
end
メソッド名は英数字とアンダースコアが使えますが、先頭に数字は使えません
メソッドを呼び出す
呼び出すのは簡単です
例
def puts_Hello
puts "Hello"
end
puts_Hello
こんな感じで、定義後にメソッド名を書くだけで完了です
もちろんCと同じで、定義は呼び出す前に書いてください
引数を受け取るメソッド
これもそう難しくはありません
def puts_number(a)
puts "#{a}が入力されました"
end
puts_number(2)
[実行結果]
2が入力されました
先ほどの一般例のように、括弧内に引数を渡せばOKです
カンマ(,)で区切れば、複数の引数も受け取れます
def add_number(a,b,c)
puts a+b+c
end
add_number(3,2,5)
[実行結果]
10
最終更新:2009年05月22日 11:44