Class: Miyako::Parts

Inherits:
Delegator
  • Object
show all
Includes:
Enumerable, Animation, Layout, SpriteBase
Defined in:
lib/Miyako/API/parts.rb

Overview

パーツ構成クラス

複数のスプライト・アニメーションをまとめて一つの部品として構成できるクラス

最初に、基準となる「レイアウト空間(LayoutSpaceクラスのインスタンス)」を登録し、その上にパーツを加える

すべてのパーツは、すべてレイアウト空間にスナップされる (登録したパーツのレイアウト情報が変わることに注意)

Instance Method Summary collapse

Methods included from Layout

#add_snap_child, #bottom, #bottom!, #center, #center!, #centering, #centering!, #copy_layout, #delete_snap_child, #get_snap_children, #get_snap_sprite, #h, #include_snap_child?, #init_layout, #layout_dispose, #left, #left!, #middle, #middle!, #move, #move_to, #on_move, #outside_bottom, #outside_bottom!, #outside_left, #outside_left!, #outside_right, #outside_right!, #outside_top, #outside_top!, #pos, #rect, #relative_move_to, #relative_move_to!, #reset_snap, #right, #right!, #segment, #set_layout_size, #set_snap_children, #set_snap_sprite, #size, #snap, #top, #top!, #update_layout, #update_layout_position, #w, #x, #y

Methods included from Animation

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

Methods included from SpriteBase

#bitmap, #image_rect, #image_size, #oh, #oh=, #ow, #ow=, #ox, #ox=, #oy, #oy=, #part_rect, #rect, #render_d, #render_xy, #render_xy_to, #update

Constructor Details

#initialize(size) ⇒ Parts

Partsクラスインスタンスを生成

size

パーツ全体の大きさ。Size構造体のインスタンスもしくは要素数が2の配列


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

def initialize(size)
  @list = SpriteList.new

  init_layout
  set_layout_size(size[0], size[1])
end

Instance Method Details

#[]=(name, value) ⇒ Object

補助パーツvalueをnameに割り当てる

name

補助パーツに与える名前(シンボル)

value

補助パーツのインスタンス(スプライト、テキストボックス、アニメーション、レイアウトボックスなど)

返却値

自分自身


67
68
69
70
71
# File 'lib/Miyako/API/parts.rb', line 67

def []=(name, value)
  @list[name] = value
  @list[name].snap(self)
  self
end

#__getobj__Object


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

def __getobj__
  @list
end

#__setobj__(obj) ⇒ Object


50
51
# File 'lib/Miyako/API/parts.rb', line 50

def __setobj__(obj)
end

#broad_rectObject

現在の画面の最大の大きさを矩形で取得する

各パーツの位置により、取得できる矩形の大きさが変わる 但し、パーツ未登録の時は、インスタンス生成時の大きさから矩形を生成する

返却値

生成された矩形(Rect構造体のインスタンス)


151
152
153
154
155
156
157
158
159
160
161
# File 'lib/Miyako/API/parts.rb', line 151

def broad_rect
  rect = self.rect.to_a
  return self.rect if @list.length == 0
  rect_list = rect.zip(*(self.map{|pair| pair[1].broad_rect.to_a}))  # width -> right

  rect_list[2] = rect_list[2].zip(rect_list[0]).map{|xw| xw[0] + xw[1]}  # height -> bottom

  rect_list[3] = rect_list[3].zip(rect_list[1]).map{|xw| xw[0] + xw[1]}
  x, y = rect_list[0].min, rect_list[1].min
  return Rect.new(x, y, rect_list[2].max - x, rect_list[3].max - y)
end

#delete(name) ⇒ Object

指定した数の要素を先頭から取り除く

SpriteListの先頭からn個の要素を取り除いて、新しいSpriteListとする。 nがマイナスの時は、後ろからn個の要素を取り除く。 nが0の時は、空のSpriteListを返す。 自分自身に何も登録されていなければnilを返す (例)a=SpriteList(pair(:a),pair(:b),pair(:c))

b=a.delete(:b)
  =>a=SpriteList(pair(:a),pair(:c))
    b=SpriteList(pair(:b))
b=a.delete(:d)
  =>a=SpriteList(pair(:a),pair(:b),pair(:c))
    b=nil
n

取り除く要素数。省略時は1

返却値

取り除いたスプライト


102
103
104
105
106
# File 'lib/Miyako/API/parts.rb', line 102

def delete(name)
  ret = @list.delete
  ret.body.reset_snap
  ret.body
end

#disposeObject

パーツに登録しているインスタンスを解放する


164
165
166
# File 'lib/Miyako/API/parts.rb', line 164

def dispose
  @list.dispose
end

#eachObject


208
209
210
# File 'lib/Miyako/API/parts.rb', line 208

def each
  @list.each
end

#hideObject


188
189
190
# File 'lib/Miyako/API/parts.rb', line 188

def hide
  @list.hide
end

#initialize_copy(obj) ⇒ Object

:nodoc:


53
54
55
56
57
58
59
60
61
# File 'lib/Miyako/API/parts.rb', line 53

def initialize_copy(obj) #:nodoc:
  copy_layout
  @list = SpriteList.new
  obj.sprite_list.each{|pair|
    @list[pair.name] = pair.body.deep_dup
    @list[pair.name].snap(self)
  }
  self
end

#move!(dx, dy, &block) ⇒ Object


212
213
214
# File 'lib/Miyako/API/parts.rb', line 212

def move!(dx, dy, &block)
  @list.move!(dx, dy, &block)
end

#move_to!(x, y, &block) ⇒ Object


216
217
218
# File 'lib/Miyako/API/parts.rb', line 216

def move_to!(x, y, &block)
  @list.move_to!(x, y, &block)
end

#partsObject

すべての補助パーツの一覧を配列で返す

返却値

パーツ名の配列(登録順)


114
115
116
# File 'lib/Miyako/API/parts.rb', line 114

def parts
  return @list.names
end

#push(*pairs) ⇒ Object

名前・スプライトの対を登録する

リストに名前・スプライトをリストの後ろに追加する 効果はSpriteList#addと同じだが、複数の対を登録できることが特徴 (例)push()

push([name1,sprite1],[name2,sprite2])
pairs

名前とスプライトの対を配列にしたもの。対は、として渡す。

返却値

追加した自分自身を渡す


80
81
82
83
84
85
86
# File 'lib/Miyako/API/parts.rb', line 80

def push(*pairs)
  pairs.each{|pair|
    @list.push(pair)
    @list[pair[0]].snap(self)
  }
  return self
end

#remove(name) ⇒ Object

指定の補助パーツを除外する

name

除外するパーツ名(シンボル)

返却値

自分自身


121
122
123
124
# File 'lib/Miyako/API/parts.rb', line 121

def remove(name)
  @list.delete(name)
  return self
end

#renderObject


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

def render
  @list.render
end

#render_to(dst) ⇒ Object


172
173
174
# File 'lib/Miyako/API/parts.rb', line 172

def render_to(dst)
  @list.render_to(dst)
end

#resetObject


200
201
202
# File 'lib/Miyako/API/parts.rb', line 200

def reset
  @list.reset
end

#showObject


184
185
186
# File 'lib/Miyako/API/parts.rb', line 184

def show
  @list.show
end

#sprite_listObject

:nodoc:


108
109
110
# File 'lib/Miyako/API/parts.rb', line 108

def sprite_list #:nodoc:
  return @list
end

#startObject


192
193
194
# File 'lib/Miyako/API/parts.rb', line 192

def start
  @list.start
end

#stopObject


196
197
198
# File 'lib/Miyako/API/parts.rb', line 196

def stop
  @list.stop
end

#to_sprite {|sprite| ... } ⇒ Object

スプライトに変換した画像を表示する

すべてのパーツを貼り付けた、1枚のスプライトを返す 引数1個のブロックを渡せば、スプライトに補正をかけることが出来る

返却値

描画したスプライト

Yields:

  • (sprite)

130
131
132
133
134
135
136
137
138
# File 'lib/Miyako/API/parts.rb', line 130

def to_sprite
  rect = self.broad_rect
  sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
  Drawing.fill(sprite, [0,0,0])
  Bitmap.ck_to_ac!(sprite, [0,0,0])
  self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
  yield sprite if block_given?
  return sprite
end

#to_unitObject

SpriteUnit構造体を生成する

いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。

返却値

生成したSpriteUnit構造体


143
144
145
# File 'lib/Miyako/API/parts.rb', line 143

def to_unit
  return self.to_sprite.to_unit
end

#update_animationObject


204
205
206
# File 'lib/Miyako/API/parts.rb', line 204

def update_animation
  @list.update_animation
end

#visibleObject


176
177
178
# File 'lib/Miyako/API/parts.rb', line 176

def visible
  @list.visible
end

#visible=(f) ⇒ Object


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

def visible=(f)
  @list.visible=f
end