Class: Miyako::RasterScroll

Inherits:
Object show all
Defined in:
lib/Miyako/EXT/raster_scroll.rb

Overview

ラスタスクロール実行クラス

波の様に揺れる(疑似)ラスタスクロールを行うクラス 波はサイン波で構成される

Instance Method Summary collapse

Constructor Details

#initialize(sspr) ⇒ RasterScroll

インスタンスを作成する

ラスタスクロール対象のスプライトを登録する

sspr

ラスタスクロール対象スプライト

返却値

作成したインスタンス


31
32
33
34
35
36
37
38
39
40
41
# File 'lib/Miyako/EXT/raster_scroll.rb', line 31

def initialize(sspr)
  @src = sspr
  @lines = 0
  @h = @src.h
  @size = 0
  @sangle = 0
  @dangle = 0
  @fade_out = false
  @fo_size = 0
  @effecting = false
end

Instance Method Details

#effecting?Boolean

ラスタスクロールの実行状態を問い合わせる

返却値

ラスタスクロール中の時はtrueを返す

Returns:

  • (Boolean)

88
89
90
# File 'lib/Miyako/EXT/raster_scroll.rb', line 88

def effecting?
  return @effecting
end

#fade_out(fs, fw) ⇒ Object

ラスタスクロールをフェードアウトさせる

引数fwに与えられた間隔で振幅が減っていき(減る量は引数fsで与えられた値)、振幅がゼロになると終了する

fs

フェードアウトの変化量

fw

フェードアウトの変化を待つカウント(WaitCounterクラスインスタンス)


156
157
158
159
160
161
162
# File 'lib/Miyako/EXT/raster_scroll.rb', line 156

def fade_out(fs, fw)
  @fo_size = fs
  @fo_wait = fw
  @fo_wait.start
  @fade_out = true
  return self
end

#fade_out?Boolean

ラスタスクロールの実行状態を問い合わせる

返却値

ラスタスクロール中の時はtrueを返す

Returns:

  • (Boolean)

94
95
96
# File 'lib/Miyako/EXT/raster_scroll.rb', line 94

def fade_out?
  return @fade_out
end

#renderObject

ラスタスクロールを画面に描画する


108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/Miyako/EXT/raster_scroll.rb', line 108

def render
  angle = @sangle
  ty = @src.oy
  th = @src.oh
  pos = @src.pos
  @src.oh = @lines
  @src.oy = 0
  @h.times{|y|
    rsx = @size * Math.sin(angle)
    @src.render_xy @src.x + rsx, @src.y + y * @lines
    ny = @src.oy + @lines
    @src.oh = @src.h - ny if (@src.h - ny < @lines)
    @src.oy = ny
    angle = angle + @dangle
  }
  @src.oy = ty
  @src.oh = th
  @src.move_to!(*pos)
  return self
end

#render_to(dst) ⇒ Object

ラスタスクロールを画像に描画する

dst

描画先画像


131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/Miyako/EXT/raster_scroll.rb', line 131

def render_to(dst)
  angle = @sangle
  ty = @src.oy
  th = @src.oh
  pos = @src.pos
  @src.oh = @lines
  @src.oy = 0
  @h.times{|y|
    rsx = @size * Math.sin(angle)
    @src.render_xy_to dst, @src.x + rsx, @src.y + y * @lines
    ny = @src.oy + @lines
    @src.oh = @src.h - ny if (@src.h - ny < @lines)
    @src.oy = ny
    angle = angle + @dangle
  }
  @src.oy = ty
  @src.oh = th
  @src.move_to!(*pos)
  return self
end

#start(params) ⇒ Object

ラスタスクロールを開始する

ラスタスクロール実行用に設定する引数は以下の通り :lines -> ライン数(:lines=>3を指定すると、3ラインずつラスタスクロールを行う)。デフォルトは1(ライン) :size -> 最大振幅数(:size=>20を指定すると、最大20ピクセルの高さの波となる)。デフォルトは4(ピクセル) :start_angle -> 開始角度(一番上のラインでの振幅角度(ラジアンではなく角度なのに注意!))。デフォルトは0(度) :distance -> 角度の変化量(ラインごとの角度の変化量。:distance=>1のときは、1度ずつ変化させる)。デフォルトは1(度) :wait -> 変化させる間隔(WaitCounterクラスのインスタンス)。デフォルトは0.1秒間隔

params

ラスタスクロール情報引数

返却値

自分自身を返す


52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/Miyako/EXT/raster_scroll.rb', line 52

def start(params)
  @lines = params[:lines] || 1
  @size = params[:size] || 4
  @sangle = params[:start_angle] || 0
  @dangle = params[:distance] || 1
  @wait = params[:wait] || WaitCounter.new(0.1)
  @h = @h / @lines
  @fade_out = false
  @fo_size = 0
  @effecting = true
  @wait.start
  return self
end

#stopObject

ラスタスクロールを停止する


99
100
101
102
103
104
105
# File 'lib/Miyako/EXT/raster_scroll.rb', line 99

def stop
  @wait.stop
  @fo_size.stop if @fo_size
  @effecting = false
  @fade_out = false
  return self
end

#updateObject

ラスタスクロール処理を更新する

返却値

自分自身を返す


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/Miyako/EXT/raster_scroll.rb', line 68

def update
  return self unless @effecting
  if @wait.finish?
    @sangle = (@sangle + @dangle) % 360
    @wait.start
    if @fade_out
      return self unless @fo_wait.finish?
      @size = @size - @fo_size
      @fo_wait.start
      if @size <= 0
        @effecting = false
        @fade_out = false
      end
    end
  end
  return self
end