イベント処理
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カウントを取りたいと思います
思い切り拝借品ですが、今回はこれを使って、3カウントを取りたいと思います
画像サイズの設定
今回の画像は1パターン「100×100」ドットなので、画像の描画サイズを
「100×100」に設定します
「100×100」に設定します
img = Image.new("animation.bmp", :w => 100, :h => 100
アニメーションの設定
アニメーション機能を使うには、アニメーション・パターンを登録する必要があります
その際、画像オブジェクトに対して「add_animation」メソッドを使います
その際、画像オブジェクトに対して「add_animation」メソッドを使います
img.add_animation(:roll => [20, [0,1,2] ])
:rollはアニメーションの名前で、:roll以外の名前でも問題ありません
その後ろに切り替え時間(フレーム)とパターン番号を列挙します
(パターン番号は、左上から順に設定したサイズ分画像を取って、取れなくなった時点で1段下がってまた左順に取って行きます)
その後ろに切り替え時間(フレーム)とパターン番号を列挙します
(パターン番号は、左上から順に設定したサイズ分画像を取って、取れなくなった時点で1段下がってまた左順に取って行きます)
パターンのフォーマットは、次のようなルールになっています
[切り替え時間, [パターン1, パターン2・・・], ジャンプ先(省略可)]
複数のアニメーション・パターンがある場合、それぞれのアニメーションにジャンプ出来ます
ジャンプ先(アニメーションの名前)を設定すると、アニメーション再生後に設定したアニメーションを続けて再生出来ます
ジャンプ先を省略すると、今のアニメーションを繰り返し再生します
ジャンプ先(アニメーションの名前)を設定すると、アニメーション再生後に設定したアニメーションを続けて再生出来ます
ジャンプ先を省略すると、今のアニメーションを繰り返し再生します
アニメーションの開始
それでは、登録したアニメーションを再生させましょう
再生には「start_animation」メソッドを使います
再生には「start_animation」メソッドを使います
img.start_animation :roll
前に使った画像オブジェクト、後ろにアニメーションの名前を渡します
なお、アニメーションには「update」メソッドが必須です
なお、アニメーションには「update」メソッドが必須です
img.update
これがメイン・ループ内に無いと、アニメーションが更新(正常作動)されません
もちろん、img.renderも忘れずにupdateの下に書き加えてください
今回のアニメーションはジャンプ先を設定していないので、20フレーム毎に「1,2,3,1,2,3・・・」を繰り返します
なお、アニメーションメソッドはメイン・ループの外で定義してください
もちろん、img.renderも忘れずにupdateの下に書き加えてください
今回のアニメーションはジャンプ先を設定していないので、20フレーム毎に「1,2,3,1,2,3・・・」を繰り返します
なお、アニメーションメソッドはメイン・ループの外で定義してください
メソッド
メソッドの定義
さて、ここまで来ると「オリジナルのメソッドが欲しいな」と思う頃です
Rubyでのメソッドの定義はこのように行います
Rubyでのメソッドの定義はこのように行います
def メソッド名(引数)
メソッドが行う処理
end
メソッド名は英数字とアンダースコアが使えますが、先頭に数字は使えません
メソッドを呼び出す
呼び出すのは簡単です
例 def puts_Hello puts "Hello" end puts_Hello
こんな感じで、定義後にメソッド名を書くだけで完了です
もちろんCと同じで、定義は呼び出す前に書いてください
もちろん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
このwikiの更新情報RSS