サイログ。

~雑多な記事置き場~

Effectクラスを使って疑似ラスタスクロール

Miyakoロゴをラスタスクロール


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クラスかぁ?(作者が言うなよ(^^;)