Intervalモジュール

2 views
Skip to first unread message

Daigo

unread,
Jun 26, 2008, 4:04:51 AM6/26/08
to Star Ruby
StarRubyの補助モジュールとして、自作のゲームには良く使っているモジュールなのですが、
Intervalモジュールというものを是非紹介させていただきたい。

-3フレーム後に, xxの処理を行いたい
-画面のフェードインが完了してから、キャラクターを動かせるようにしたい
-複雑な移動ルートを指定したい
-画面をシェイクさせたい

などという、時系列に沿った処理を可能にするものです。
もうすこししたらどこかにアップしたいと思いますが、その前に意見がほしいなと思いまして。

以下がサンプルです。
- キャラクターを
- 右に10フレームかけて16ピクセル動かした後、
- 上に10フレームかけて16ピクセル動かして、
- 左下に10フレームかけて左右16ピクセル動かし、
- その後4フレーム4回点滅させて、
- 消滅させる。

# update と renderは毎フレーム呼ばれます。Spriteクラスはまぁ、いわゆるスプライトということで。
# Lerp:補間処理
# Sequence:直列処理
# Parallel:並列処理
# Loop:繰り返し処理
#Func:ブロック内容実行
---------------------------------------------------------------
def initialize
@character = Sprite.new
tx = @character.x
ty = @character.y
s = Sequence.new(
Lerp.new(10, 0, 16){|v| @character.x = tx + v},
Lerp.new(10, 0, -16){|v| @character.y = ty + v},
Parallel.new(
Lerp.new(10, 0, 16){|v| @character.x = tx + v},
Lerp.new(10, 0, -16){|v| @character.y = ty + v}
),
Loop.new(4,
Lerp.new(2, 0, 255){|v| @character.alpha = v},
Lerp.new(2, 255, 0){|v| @character.alpha = v}
),
Func{@character = nil}
)
@runner = IntervalRunner.new(s)
end

def update
@runner.update unless @runner.done?
end

der render(s)
@character.render(s)
end
---------------------------------------------------------------

基本Intervalクラス群を組み合わせて自分のIntervalを作ることも可能です。
#キャラクターが歩きながら、移動する例
der walk_interval
Parallel.new(
self.move_interval(10, Point.new(0,0), Point.new(30,30)), #キャラクターを指
定座標から指定座標に移動
Loop.new(-1,
self.walk_animation_interval #キャラクターが足踏みするアニメーションをずっと繰り返す。
)
)

という感じです。
もっとうまい方法あるとか、もっと便利な方法があるとかした場合どうか教えていただきたいです><

よろしくお願いします。
Reply all
Reply to author
Forward
0 new messages