Effectクラスを使って疑似ラスタスクロール
Miyakoでちょっと遊んでみました。
Effectクラスを作ったときにやってみたかったのが疑似ラスタスクロール。
スクリプトを組んでみました。
class RasterScroll < Effect def initialize(sspr, dspr = nil) super @lines = 0 @h = @src.h @size = 0 @angle = 0 @sangle = 0 @dangle = 0 @fade_out = false @fo_size = 0 end def start(w, *param) super @lines = @param[0] @size = @param[1] @sangle = @param[2] @dangle = @param[3] @h = @h / @lines @fade_out = false @fo_size = 0 end def update(screen) @angle = @sangle @h.times{|y| rsx = @size * Math.sin(@angle) SDL.blitSurface(@src.bitmap, @src.ox, @src.oy + y * @lines, @src.ow, @lines, screen, @src.x + rsx, @src.y + y * @lines) @angle = @angle + @dangle } if @cnt == 0 if @fade_out @size = @size - @fo_size @effecting = false if @size <= 0 end @sangle = (@sangle + 1) % 360 @cnt = @wait else @cnt = @cnt - 1 end end def fade_out(fs) @fo_size = fs @fade_out = true end end
startメソッドの引数は1番目から、
- ウェイト
- スクロール単位(「4」と入れると4ラインずつスクロールする)
- スクロールの横幅(「100」と入れると、横100ドットのスクロールになる)
- スクロールの開始角度(これは大抵0度から)
- スクロールの角度の単位(「0.1」と入れると0.1度単位のサインカーブになる)
となります。
fede_outメソッドの引数は、減らしていくスクロール幅を意味します。
startメソッドで指定した横幅から段々と減っていき、横幅が0になるとエフェクト終了です。
思ったより簡単にできたなぁ。
意外とMiyakoのキモってEffectクラスかぁ?(作者が言うなよ(^^;)