Class: Miyako::Map::MapLayer
Overview
:nodoc: all
Instance Attribute Summary collapse
-
#ignore_list ⇒ Object
readonly
Returns the value of attribute ignore_list.
-
#mapchip ⇒ Object
readonly
Returns the value of attribute mapchip.
-
#mapchip_units ⇒ Object
readonly
Returns the value of attribute mapchip_units.
-
#pos ⇒ Object
readonly
Returns the value of attribute pos.
-
#size ⇒ Object
readonly
Returns the value of attribute size.
-
#visible ⇒ Object
レンダリングの可否(true->描画 false->非描画).
Instance Method Summary collapse
-
#can_access?(type, inout, pos, dx, dy, *ignores) ⇒ Boolean
キャラクタとマップチップが重なっているかどうか問い合わせる 指定の位置と方向で、指定の位置のマップチップ上で移動できるかどうか問い合わせる 指定の位置のマップチップ番号が以下の時はnilを返す 1)-1(未定義)のとき 2)FixexMapLayer#ignore_listに含まれているとき 3)引数ignoresに含まれているとき また、dx==0, dy==0のときもtrueを返す type:: 移動形式(0以上の整数) inout:: 入退形式(:in もしくは :out) pos:: 調査対象のマップチップの位置 dx:: 移動量(x座標) dy:: 移動量(y座標) 返却値:: 移動可能ならばtrueを返す.
-
#collision?(type, pos, collision, cpos, *ignores) ⇒ Boolean
キャラクタとマップチップが重なっているかどうか問い合わせる 指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと重なっているかどうか問い合わせる 引数は、Rect(x,y,w,h)形式(Rect構造体、の配列)で渡す 指定の位置のマップチップ番号が以下の時はnilを返す 1)-1(未定義)のとき 2)FixexMapLayer#ignore_listに含まれているとき 3)引数ignoresに含まれているとき type:: 移動形式(0以上の整数) pos:: 調査対象のマップチップの位置 collision:: キャラクタのコリジョン cpos:: キャラクタの位置 返却値:: コリジョンが重なっていれば、そのときのマップチップ番号を返す。重なっていなければnilを返す.
-
#convert_position(x, y) ⇒ Object
:nodoc:.
-
#cover?(type, pos, collision, cpos, *ignores) ⇒ Boolean
キャラクタとマップチップが覆い被さっているかどうか問い合わせる 指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンを覆い被さっているかどうか問い合わせる 引数は、Rect(x,y,w,h)形式(Rect構造体、の配列)で渡す 指定の位置のマップチップ番号が以下の時はnilを返す 1)-1(未定義)のとき 2)FixexMapLayer#ignore_listに含まれているとき 3)引数ignoresに含まれているとき type:: 移動形式(0以上の整数) pos:: 調査対象のマップチップの位置 collision:: キャラクタのコリジョン cpos:: キャラクタの位置 返却値:: どちらかのコリジョンが覆い被さっていれば、そのときのマップチップ番号を返す。 被さっていなければnilを返す.
-
#dispose ⇒ Object
:nodoc:.
-
#get_code(x, y) ⇒ Object
実座標を使用して、指定のレイヤー・位置のマップチップ番号を取得 イベントレイヤーでの番号はイベント番号と一致する x:: マップチップ単位での位置(ピクセル単位) y:: マップチップ単位での位置(ピクセル単位) 返却値:: マップチップ番号(マップチップが設定されている時は0以上の整数、設定されていない場合は-1が返る).
-
#get_div_array(s, t, v) ⇒ Object
:nodoc:.
-
#get_mod_array(s, t, v) ⇒ Object
:nodoc:.
-
#initialize(mapchip, mapdat, layer_size) ⇒ MapLayer
constructor
:nodoc:.
-
#initialize_copy(obj) ⇒ Object
:nodoc:.
-
#layer ⇒ Object
レイヤー配列を取得する レイヤーを構成している配列を取得する 取得した配列にアクセスするときの書式は、以下のようになる。 layer[x] 返却値:: 所持しているレイヤー配列.
-
#meet?(type, pos, collision, cpos, *ignores) ⇒ Boolean
キャラクタとマップチップが隣り合っているかどうか問い合わせる 指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと隣り合っているかどうか問い合わせる 引数は、Rect(x,y,w,h)形式(Rect構造体、の配列)で渡す 指定の位置のマップチップ番号が以下の時はnilを返す 1)-1(未定義)のとき 2)FixexMapLayer#ignore_listに含まれているとき 3)引数ignoresに含まれているとき type:: 移動形式(0以上の整数) pos:: 調査対象のマップチップの位置 collision:: キャラクタのコリジョン cpos:: キャラクタの位置 返却値:: コリジョンが隣り合っていれば、そのときのマップチップ番号を返す。隣り合っていなければnilを返す.
-
#product_position(rect) ⇒ Object
指定の矩形のキャラクタに掛かるマップチップの左上位置の組み合わせを返す 但し、引数には、Rect(x,y,w,h)形式のインスタンスを渡す rect:: キャラクタの矩形 返却値:: マップチップ左上位置の配列(キャラクタに掛かる位置の組み合わせ).
-
#product_position_by_square(square) ⇒ Object
指定の矩形のキャラクタに掛かるマップチップの左上位置の組み合わせを返す 但し、引数には、Square()形式のインスタンスを渡す square:: キャラクタの矩形 返却値:: マップチップ左上位置の配列(キャラクタに掛かる位置の組み合わせ).
-
#render ⇒ Object
マップレイヤーを画面に描画する 転送する画像は、マップ上のから(-margin.x, -margin.y)(単位:ピクセル)の位置に対応するチップを左上にして描画する ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る) (ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない) ブロックの引数は、|画面のSpriteUnit|となる。 visibleメソッドの値がfalseのときは描画されない。 返却値:: 自分自身を返す.
-
#render_to(dst) ⇒ Object
マップレイヤーを画像に転送する 転送する画像は、マップ上のから(-margin.x, -margin.y)(単位:ピクセル)の位置に対応するチップを左上にして描画する ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る) (ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない) ブロックの引数は、|転送先のSpriteUnit|となる。 visibleメソッドの値がfalseのときは描画されない。 dst:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス) 返却値:: 自分自身を返す.
-
#resize ⇒ Object
:nodoc:.
-
#round(v, max) ⇒ Object
:nodoc:.
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_xy, #render_xy_to, #show, #to_sprite, #to_unit, #update
Constructor Details
#initialize(mapchip, mapdat, layer_size) ⇒ MapLayer
:nodoc:
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/Miyako/API/map.rb', line 57 def initialize(mapchip, mapdat, layer_size) #:nodoc: @mapchip = mapchip @pos = Point.new(0, 0) @size = layer_size.dup @ow = @mapchip.chip_size.w @oh = @mapchip.chip_size.h @real_size = Size.new(@size.w * @ow, @size.h * @oh) @mapdat = mapdat @baseimg = @mapchip.chip_image @divpx = get_div_array(0, @real_size.w, @ow) @divpy = get_div_array(0, @real_size.h, @oh) @modpx = get_mod_array(0, @real_size.w, @ow) @modpy = get_mod_array(0, @real_size.h, @oh) @modpx2 = get_mod_array(0, @size.w * 2 + 1, @size.w) @modpy2 = get_mod_array(0, @size.h * 2 + 1, @size.h) @cdivsx = get_div_array(0, @mapchip.chips, @mapchip.size.w) @cmodsx = get_mod_array(0, @mapchip.chips, @mapchip.size.w) @cdivsy = get_div_array(0, @mapchip.chips, @mapchip.size.h) @cmodsy = get_mod_array(0, @mapchip.chips, @mapchip.size.h) @cdivsx = @cdivsx.map{|v| v * @ow } @cdivsy = @cdivsy.map{|v| v * @oh } @cmodsx = @cmodsx.map{|v| v * @ow } @cmodsy = @cmodsy.map{|v| v * @oh } @mapchip_units = Array.new(@mapchip.chips){|idx| SpriteUnitFactory.create(:bitmap=>@baseimg.bitmap, :ox => (idx % @mapchip.size.w) * @ow, :oy => (idx / @mapchip.size.w) * @oh, :ow => @ow, :oh => @oh) } @visible = true @def_ignore = -1 @ignore_list = [] resize end |
Instance Attribute Details
#ignore_list ⇒ Object (readonly)
Returns the value of attribute ignore_list.
44 45 46 |
# File 'lib/Miyako/API/map.rb', line 44 def ignore_list @ignore_list end |
#mapchip ⇒ Object (readonly)
Returns the value of attribute mapchip.
44 45 46 |
# File 'lib/Miyako/API/map.rb', line 44 def mapchip @mapchip end |
#mapchip_units ⇒ Object (readonly)
Returns the value of attribute mapchip_units.
44 45 46 |
# File 'lib/Miyako/API/map.rb', line 44 def mapchip_units @mapchip_units end |
#pos ⇒ Object (readonly)
Returns the value of attribute pos.
44 45 46 |
# File 'lib/Miyako/API/map.rb', line 44 def pos @pos end |
#size ⇒ Object (readonly)
Returns the value of attribute size.
44 45 46 |
# File 'lib/Miyako/API/map.rb', line 44 def size @size end |
#visible ⇒ Object
レンダリングの可否(true->描画 false->非描画)
43 44 45 |
# File 'lib/Miyako/API/map.rb', line 43 def visible @visible end |
Instance Method Details
#can_access?(type, inout, pos, dx, dy, *ignores) ⇒ Boolean
キャラクタとマップチップが重なっているかどうか問い合わせる
指定の位置と方向で、指定の位置のマップチップ上で移動できるかどうか問い合わせる 指定の位置のマップチップ番号が以下の時はnilを返す 1)-1(未定義)のとき 2)FixexMapLayer#ignore_listに含まれているとき 3)引数ignoresに含まれているとき また、dx==0, dy==0のときもtrueを返す
- type
-
移動形式(0以上の整数)
- inout
-
入退形式(:in もしくは :out)
- pos
-
調査対象のマップチップの位置
- dx
-
移動量(x座標)
- dy
-
移動量(y座標)
- 返却値
-
移動可能ならばtrueを返す
233 234 235 236 237 238 239 240 |
# File 'lib/Miyako/API/map.rb', line 233 def can_access?(type, inout, pos, dx, dy, *ignores) return true if dx == 0 and dy == 0 code = get_code(pos[0]+dx, pos[1]+dy) return true if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code)) index = MapDir.index2(inout, dx, dy) return true if index == -1 return @mapchip.access_table[type][code][index] end |
#collision?(type, pos, collision, cpos, *ignores) ⇒ Boolean
キャラクタとマップチップが重なっているかどうか問い合わせる
指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと重なっているかどうか問い合わせる 引数は、Rect(x,y,w,h)形式(Rect構造体、の配列)で渡す 指定の位置のマップチップ番号が以下の時はnilを返す 1)-1(未定義)のとき 2)FixexMapLayer#ignore_listに含まれているとき 3)引数ignoresに含まれているとき
- type
-
移動形式(0以上の整数)
- pos
-
調査対象のマップチップの位置
- collision
-
キャラクタのコリジョン
- cpos
-
キャラクタの位置
- 返却値
-
コリジョンが重なっていれば、そのときのマップチップ番号を返す。重なっていなければnilを返す
177 178 179 180 181 |
# File 'lib/Miyako/API/map.rb', line 177 def collision?(type, pos, collision, cpos, *ignores) code = get_code(*pos.to_a) return nil if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code)) return @mapchip.collision_table[type][code].collision?(pos, collision, cpos) ? code : nil end |
#convert_position(x, y) ⇒ Object
:nodoc:
125 126 127 128 |
# File 'lib/Miyako/API/map.rb', line 125 def convert_position(x, y) #:nodoc: return Point.new(@modpx2[round(x, @size.w)], @modpy2[round(y, @size.h)]) end |
#cover?(type, pos, collision, cpos, *ignores) ⇒ Boolean
キャラクタとマップチップが覆い被さっているかどうか問い合わせる
指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンを覆い被さっているかどうか問い合わせる 引数は、Rect(x,y,w,h)形式(Rect構造体、の配列)で渡す 指定の位置のマップチップ番号が以下の時はnilを返す 1)-1(未定義)のとき 2)FixexMapLayer#ignore_listに含まれているとき 3)引数ignoresに含まれているとき
- type
-
移動形式(0以上の整数)
- pos
-
調査対象のマップチップの位置
- collision
-
キャラクタのコリジョン
- cpos
-
キャラクタの位置
- 返却値
-
どちらかのコリジョンが覆い被さっていれば、そのときのマップチップ番号を返す。
被さっていなければnilを返す
214 215 216 217 218 |
# File 'lib/Miyako/API/map.rb', line 214 def cover?(type, pos, collision, cpos, *ignores) code = get_code(*pos.to_a) return nil if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code)) return @mapchip.collision_table[type][code].cover?(pos, collision, cpos) ? code : nil end |
#dispose ⇒ Object
:nodoc:
242 243 244 245 246 247 |
# File 'lib/Miyako/API/map.rb', line 242 def dispose #:nodoc: @mapdat = nil @baseimg = nil @ignore_list.clear @ignore_list = [] end |
#get_code(x, y) ⇒ Object
実座標を使用して、指定のレイヤー・位置のマップチップ番号を取得
イベントレイヤーでの番号はイベント番号と一致する
- x
-
マップチップ単位での位置(ピクセル単位)
- y
-
マップチップ単位での位置(ピクセル単位)
- 返却値
-
マップチップ番号(マップチップが設定されている時は0以上の整数、設定されていない場合は-1が返る)
144 145 146 147 |
# File 'lib/Miyako/API/map.rb', line 144 def get_code(x, y) pos = convert_position(x / @mapchip.chip_size[0], y / @mapchip.chip_size[1]) return @mapdat[pos.y][pos.x] end |
#get_div_array(s, t, v) ⇒ Object
:nodoc:
113 114 115 116 117 |
# File 'lib/Miyako/API/map.rb', line 113 def get_div_array(s, t, v) #:nodoc: a = Array.new (s..t).each{|i| a.push(i / v)} return a end |
#get_mod_array(s, t, v) ⇒ Object
:nodoc:
119 120 121 122 123 |
# File 'lib/Miyako/API/map.rb', line 119 def get_mod_array(s, t, v) #:nodoc: a = Array.new (s..t).each{|i| a.push(i % v)} return a end |
#initialize_copy(obj) ⇒ Object
:nodoc:
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/Miyako/API/map.rb', line 93 def initialize_copy(obj) #:nodoc: @mapchip = @mapchip.dup @size = @size.dup @mapchip_unit = @mapchip_unit.dup @divpx = get_div_array(0, @real_size.w, @ow) @divpy = get_div_array(0, @real_size.h, @oh) @modpx = get_mod_array(0, @real_size.w, @ow) @modpy = get_mod_array(0, @real_size.h, @oh) @modpx2 = get_mod_array(0, @size.w * 2 + 1, @size.w) @modpy2 = get_mod_array(0, @size.h * 2 + 1, @size.h) @cdivsx = get_div_array(0, @mapchip.chips, @mapchip.size.w) @cmodsx = get_mod_array(0, @mapchip.chips, @mapchip.size.w) @cdivsy = get_div_array(0, @mapchip.chips, @mapchip.size.h) @cmodsy = get_mod_array(0, @mapchip.chips, @mapchip.size.h) @cdivsx = @cdivsx.map{|v| v * @ow } @cdivsy = @cdivsy.map{|v| v * @oh } @cmodsx = @cmodsx.map{|v| v * @ow } @cmodsy = @cmodsy.map{|v| v * @oh } end |
#meet?(type, pos, collision, cpos, *ignores) ⇒ Boolean
キャラクタとマップチップが隣り合っているかどうか問い合わせる
指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと隣り合っているかどうか問い合わせる 引数は、Rect(x,y,w,h)形式(Rect構造体、の配列)で渡す 指定の位置のマップチップ番号が以下の時はnilを返す 1)-1(未定義)のとき 2)FixexMapLayer#ignore_listに含まれているとき 3)引数ignoresに含まれているとき
- type
-
移動形式(0以上の整数)
- pos
-
調査対象のマップチップの位置
- collision
-
キャラクタのコリジョン
- cpos
-
キャラクタの位置
- 返却値
-
コリジョンが隣り合っていれば、そのときのマップチップ番号を返す。隣り合っていなければnilを返す
195 196 197 198 199 |
# File 'lib/Miyako/API/map.rb', line 195 def meet?(type, pos, collision, cpos, *ignores) code = get_code(*pos.to_a) return nil if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code)) return @mapchip.collision_table[type][code].meet?(pos, collision, cpos) ? code : nil end |
#product_position(rect) ⇒ Object
指定の矩形のキャラクタに掛かるマップチップの左上位置の組み合わせを返す
但し、引数には、Rect(x,y,w,h)形式のインスタンスを渡す
- rect
-
キャラクタの矩形
- 返却値
-
マップチップ左上位置の配列(キャラクタに掛かる位置の組み合わせ)
153 154 155 |
# File 'lib/Miyako/API/map.rb', line 153 def product_position(rect) return Utility.product_position(rect, @mapchip.chip_size) end |
#product_position_by_square(square) ⇒ Object
指定の矩形のキャラクタに掛かるマップチップの左上位置の組み合わせを返す
但し、引数には、Square()形式のインスタンスを渡す
- square
-
キャラクタの矩形
- 返却値
-
マップチップ左上位置の配列(キャラクタに掛かる位置の組み合わせ)
161 162 163 |
# File 'lib/Miyako/API/map.rb', line 161 def product_position_by_square(square) return Utility.product_position_by_square(square, @mapchip.chip_size) end |
#render ⇒ Object
マップレイヤーを画面に描画する
転送する画像は、マップ上のから(-margin.x, -margin.y)(単位:ピクセル)の位置に対応するチップを左上にして描画する ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る) (ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない) ブロックの引数は、|画面のSpriteUnit|となる。 visibleメソッドの値がfalseのときは描画されない。
- 返却値
-
自分自身を返す
256 257 |
# File 'lib/Miyako/API/map.rb', line 256 def render end |
#render_to(dst) ⇒ Object
マップレイヤーを画像に転送する
転送する画像は、マップ上のから(-margin.x, -margin.y)(単位:ピクセル)の位置に対応するチップを左上にして描画する ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る) (ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない) ブロックの引数は、|転送先のSpriteUnit|となる。 visibleメソッドの値がfalseのときは描画されない。
- dst
-
転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
- 返却値
-
自分自身を返す
267 268 |
# File 'lib/Miyako/API/map.rb', line 267 def render_to(dst) end |
#resize ⇒ Object
:nodoc:
52 53 54 55 |
# File 'lib/Miyako/API/map.rb', line 52 def resize #:nodoc: @cw = (Screen.w + @ow - 1)/ @ow + 1 @ch = (Screen.h + @oh - 1)/ @oh + 1 end |
#round(v, max) ⇒ Object
:nodoc:
46 47 48 49 50 |
# File 'lib/Miyako/API/map.rb', line 46 def round(v, max) #:nodoc: v = max + (v % max) if v < 0 v %= max if v >= max return v end |