Class: Miyako::Viewport

Inherits:
Object show all
Includes:
Animation, SpriteBase
Defined in:
lib/Miyako/API/viewport.rb

Overview

ビューポートクラス

描画時の表示範囲を変更する 画面全体を基準(640x480の画面のときは(0,0)-(639,479)の範囲)として、範囲を設定する 範囲の設定はいつでも行えるが、描画にはrenderメソッドを呼び出した時の値が反映される

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Animation

[], []=, anim_hash, #reset, reset, start, #start, #stop, stop, update, update_animation, #update_animation

Methods included from SpriteBase

#bitmap, #hide, #image_rect, #image_size, #oh, #oh=, #ow, #ow=, #ox, #ox=, #oy, #oy=, #part_rect, #rect, #render_d, #render_to, #render_xy, #render_xy_to, #show, #to_sprite, #to_unit, #update

Constructor Details

#initialize(x, y, w, h) ⇒ Viewport

ビューポートのインスタンスを生成する

x

ビューポートの左上位置(x座標)

y

ビューポートの左上位置(y座標)

w

ビューポートの幅(共に1以上、0以下のときはエラーが出る)

h

ビューポートの高さ(共に1以上、0以下のときはエラーが出る)

Raises:


39
40
41
42
43
44
# File 'lib/Miyako/API/viewport.rb', line 39

def initialize(x, y, w, h)
  raise MiyakoValueError, "Illegal size! w:#{w} h:#{h}" if (w <= 0 || h <= 0)
  @rect = Rect.new(x, y, w, h)
  @sq = Rect.new(x, y, x+w-1, y+h-1)
  @visible = true
end

Instance Attribute Details

#visibleObject

レンダリングの可否(true->描画 false->非描画)


32
33
34
# File 'lib/Miyako/API/viewport.rb', line 32

def visible
  @visible
end

Instance Method Details

#disposeObject

インスタンスを解放する


173
174
175
176
# File 'lib/Miyako/API/viewport.rb', line 173

def dispose
  @rect = nil
  @sq   = nil
end

#initialize_copy(obj) ⇒ Object

:nodoc:


46
47
48
49
# File 'lib/Miyako/API/viewport.rb', line 46

def initialize_copy(obj) #:nodoc:
  @rect = @rect.dup
  @sq = @sq.dup
end

#move(dx, dy) ⇒ Object

ビューポートの左上位置を変更したときの位置を求める

移動量を指定して、位置を変更する ただし、自分自身の位置は変わらない

dx

移動量(x方向)

dy

移動量(y方向)

返却値

更新したインスタンス(Rect構造体)を返す


136
137
138
# File 'lib/Miyako/API/viewport.rb', line 136

def move(dx,dy)
  @rect.dup.move!(dx,dy)
end

#move!(dx, dy) ⇒ Object

ビューポートの左上位置を変更する

移動量を指定して、位置を変更する ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す

dx

移動量(x方向)

dy

移動量(y方向)

返却値

自分自身を返す


73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/Miyako/API/viewport.rb', line 73

def move!(dx,dy)
  orect = rect.to_a[0..1]
  osq = sq.to_a[0..1]
  @rect.move!(dx,dy)
  @sq.move!(dx, dy)
  if block_given?
    unless yield(self)
      @rect.move_to!(*orect)
      @sq.move_to!(*osq)
    end
  end
  return self
end

#move_to(x, y) ⇒ Object

ビューポートの左上位置を変更したときの位置を求める

移動先を指定して、位置を変更する ただし、自分自身の位置は変わらない

x

移動先位置(x方向)

y

移動先位置(y方向)

返却値

更新したインスタンス(Rect構造体)を返す


146
147
148
# File 'lib/Miyako/API/viewport.rb', line 146

def move_to(x,y)
  @rect.dup.move_to!(x,y)
end

#move_to!(x, y) ⇒ Object

ビューポートの左上位置を変更する

移動先を指定して、位置を変更する ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す

x

移動先位置(x方向)

y

移動先位置(y方向)

返却値

自分自身を返す


93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/Miyako/API/viewport.rb', line 93

def move_to!(x,y)
  orect = rect.to_a[0..1]
  osq = sq.to_a[0..1]
  @rect.move_to!(x,y)
  @sq.move_to!(x, y)
  if block_given?
    unless yield(self)
      @rect.move_to!(*orect)
      @sq.move_to!(*osq)
    end
  end
end

#render(&block) ⇒ Object

ビューポートの内容を画面に反映する

ブロックが渡ってきたときは、範囲を変更して指定することが出来る(この変更は、本メソッドを呼ぶ時だけ有効) ブロックの引数は、|Rect構造体|が渡される。

block

呼び出し時にブロック付き呼び出しが行われたときのブロック本体。

呼び先に渡すことが出来る。ブロックがなければnilが入る


56
57
58
59
60
61
62
63
64
65
# File 'lib/Miyako/API/viewport.rb', line 56

def render(&block)
  return unless @visible
  if block_given?
    rect = @rect.dup
    yield rect
    Screen.bitmap.set_clip_rect(*rect)
  else
    Screen.bitmap.set_clip_rect(*@rect)
  end
end

#resize(dw, dh) ⇒ Object

ビューポートの大きさを変更したときの値を求める

変化量を指定して変更する ただし、自分自身の位置は変わらない

dw

dh

高さ

返却値

更新したインスタンス(Rect構造体)を返す

Raises:


156
157
158
159
# File 'lib/Miyako/API/viewport.rb', line 156

def resize(dw,dh)
  raise MiyakoValueError, "Illegal size! w:#{w} h:#{h}" if ((@rect.w + dw) <= 0 || (@rect.h + dh) <= 0)
  @rect.dup.resize!(dw,dh)
end

#resize!(dw, dh) ⇒ Object

ビューポートの大きさを変更する

変化量を指定して変更する

dw

dh

高さ

返却値

自分自身を返す

Raises:


111
112
113
114
115
116
# File 'lib/Miyako/API/viewport.rb', line 111

def resize!(dw,dh)
  raise MiyakoValueError, "Illegal size! w:#{w} h:#{h}" if ((@rect.w + dw) <= 0 || (@rect.h + dh) <= 0)
  @rect.resize!(dw, dh)
  @sq.resize!(dw, dh)
  return self
end

#resize_to(w, h) ⇒ Object

ビューポートの大きさを変更したときの値を求める

幅と高さを指定して変更する ただし、自分自身の位置は変わらない

w

h

高さ

返却値

更新したインスタンス(Rect構造体)を返す

Raises:


167
168
169
170
# File 'lib/Miyako/API/viewport.rb', line 167

def resize_to(w,h)
  raise MiyakoValueError, "Illegal size! w:#{w} h:#{h}" if (w <= 0 || h <= 0)
  @rect.dup.resize_to!(w,h)
end

#resize_to!(w, h) ⇒ Object

ビューポートの大きさを変更する

幅と高さを指定して変更する

w

h

高さ

返却値

自分自身を返す

Raises:


123
124
125
126
127
128
# File 'lib/Miyako/API/viewport.rb', line 123

def resize_to!(w,h)
  raise MiyakoValueError, "Illegal size! w:#{w} h:#{h}" if (w <= 0 || h <= 0)
  @rect.resize_to!(w,h)
  @sq.resize_to!(w, h)
  return self
end

#squareObject

ビューポートのインスタンスを「左、右、上、下」の形式で取得する

返却値

ビューポートの矩形(Square構造体インスタンス)の複製


186
187
188
# File 'lib/Miyako/API/viewport.rb', line 186

def square
  return @sq.dup
end

#viewportObject

ビューポートのインスタンスを複製する

返却値

自分自身の複製


180
181
182
# File 'lib/Miyako/API/viewport.rb', line 180

def viewport
  return self.dup
end