PuyoPuyoChap7
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[目次へもどる>PuyoPuyo]]
* アニメーション(落下編) [#w460fc3f]
#contents
さあ見た目もいい感じになってきてテンション上がってきまし...
次は操作ブロックを・・・と言いたいところだが,
その前に連鎖のプロセスを固めてしまおう.
** アニメーション [#l90b84ac]
ついにアニメーションを導入するぞ!
ブロックが消えるときとか落下するときにアニメーションがな...
というわけで,ブロックにアニメーションの属性を追加した.
#sh(ruby){{
class Block
def initialize(col)
@color = col
@row = -1
@line = -1
init_animation
end
def init_animation
@move_x = nil
@move_y = nil
@collapse = nil
@draw_pos = [0,0]
end
def set_move_x(from, to, speed)
@move_x = {
:from => from,
:to => to,
:speed => speed,
:counter => 0
}
end
def set_move_y(from, to, speed)
@move_y = {
:from => from,
:to => to,
:speed => speed,
:counter => 0
}
end
def set_collapse
end
def update_move(param)
return nil unless param
pos = param[:from] + param[:counter] + param[:speed]
param[:counter] += param[:speed]
if param[:speed] > 0
(pos = param[:to]; param = nil) if pos > param[:to]
else
(pos = param[:to]; param = nil) if pos < param[:to]
end
return pos
end
def update(block_s)
x = update_move(@move_x)
y = update_move(@move_y)
@draw_pos[0] = x ? x : @row * block_s
@draw_pos[1] = y ? y : @line * block_s
end
def draw(ox,oy,block_s)
x = ox + @draw_pos[0]
y = oy - @draw_pos[1]
screen = GameMain.screen
screen.render_rect(x, y, block_s, block_s, get_color)
end
end
}}
長くて意味わからんが要するに以下の三つのアニメーションを...
+ x方向の移動
+ y方向の移動
+ コラプス(消滅)
コラプスについては次のチャプターで追加する予定.
@draw_posは@row,@lineとは独立に,ブロックの描画座標を保持...
** 移動アニメーション [#r2e967c9]
移動アニメーション属性の概要は以下の通り(x方向を例にとる)
- @move_xがnilならアニメーションしていない
- そうでないなら@move_xには以下の情報をもつハッシュが格納...
++ from:移動元座標(フィールドの座標を原点とした相対座標)
++ to:移動先座標(フィールドの座標を原点とした相対座標)
++ speed:1フレームにどんだけ進むか
++ counter:今までに進んだ距離
updateメソッドが呼ばれるとその時のアニメーションの状態に...
あとはこいつらをフィールドがうまく扱う.
#sh(ruby){{
class Field
def update_blocks
@blocklist.each do |block|
block.update(@block_s)
end
end
def falldown_line(r)
return unless @table[r].compact!
@fallen = true
@table[r].each.with_index do |block, l|
next if block.line == l
block.set_move_y(block.line * @block_s, l * @block_...
block.line = l
end
end
end
}}
毎フレームupdate_blocksをフィールドコントローラーから呼び...
そして,スキマスイッチの時に,アニメーションをセットする.
このとき,ブロックの行((block.line))自体はすぐさま更新さ...
これによりデバックなどでアニメーションをガン無視して次の...
** 実行 [#jb2101d6]
こんなんなる.
#media(PuyoPuyoChap7/PuyoPuyoChap7.flv);
終了行:
[[目次へもどる>PuyoPuyo]]
* アニメーション(落下編) [#w460fc3f]
#contents
さあ見た目もいい感じになってきてテンション上がってきまし...
次は操作ブロックを・・・と言いたいところだが,
その前に連鎖のプロセスを固めてしまおう.
** アニメーション [#l90b84ac]
ついにアニメーションを導入するぞ!
ブロックが消えるときとか落下するときにアニメーションがな...
というわけで,ブロックにアニメーションの属性を追加した.
#sh(ruby){{
class Block
def initialize(col)
@color = col
@row = -1
@line = -1
init_animation
end
def init_animation
@move_x = nil
@move_y = nil
@collapse = nil
@draw_pos = [0,0]
end
def set_move_x(from, to, speed)
@move_x = {
:from => from,
:to => to,
:speed => speed,
:counter => 0
}
end
def set_move_y(from, to, speed)
@move_y = {
:from => from,
:to => to,
:speed => speed,
:counter => 0
}
end
def set_collapse
end
def update_move(param)
return nil unless param
pos = param[:from] + param[:counter] + param[:speed]
param[:counter] += param[:speed]
if param[:speed] > 0
(pos = param[:to]; param = nil) if pos > param[:to]
else
(pos = param[:to]; param = nil) if pos < param[:to]
end
return pos
end
def update(block_s)
x = update_move(@move_x)
y = update_move(@move_y)
@draw_pos[0] = x ? x : @row * block_s
@draw_pos[1] = y ? y : @line * block_s
end
def draw(ox,oy,block_s)
x = ox + @draw_pos[0]
y = oy - @draw_pos[1]
screen = GameMain.screen
screen.render_rect(x, y, block_s, block_s, get_color)
end
end
}}
長くて意味わからんが要するに以下の三つのアニメーションを...
+ x方向の移動
+ y方向の移動
+ コラプス(消滅)
コラプスについては次のチャプターで追加する予定.
@draw_posは@row,@lineとは独立に,ブロックの描画座標を保持...
** 移動アニメーション [#r2e967c9]
移動アニメーション属性の概要は以下の通り(x方向を例にとる)
- @move_xがnilならアニメーションしていない
- そうでないなら@move_xには以下の情報をもつハッシュが格納...
++ from:移動元座標(フィールドの座標を原点とした相対座標)
++ to:移動先座標(フィールドの座標を原点とした相対座標)
++ speed:1フレームにどんだけ進むか
++ counter:今までに進んだ距離
updateメソッドが呼ばれるとその時のアニメーションの状態に...
あとはこいつらをフィールドがうまく扱う.
#sh(ruby){{
class Field
def update_blocks
@blocklist.each do |block|
block.update(@block_s)
end
end
def falldown_line(r)
return unless @table[r].compact!
@fallen = true
@table[r].each.with_index do |block, l|
next if block.line == l
block.set_move_y(block.line * @block_s, l * @block_...
block.line = l
end
end
end
}}
毎フレームupdate_blocksをフィールドコントローラーから呼び...
そして,スキマスイッチの時に,アニメーションをセットする.
このとき,ブロックの行((block.line))自体はすぐさま更新さ...
これによりデバックなどでアニメーションをガン無視して次の...
** 実行 [#jb2101d6]
こんなんなる.
#media(PuyoPuyoChap7/PuyoPuyoChap7.flv);
ページ名: