Daigo
unread,Jun 26, 2008, 4:04:51 AM6/26/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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 #キャラクターが足踏みするアニメーションをずっと繰り返す。
)
)
という感じです。
もっとうまい方法あるとか、もっと便利な方法があるとかした場合どうか教えていただきたいです><
よろしくお願いします。