アニメーション(消滅編) †コラプス †っつーわけで次はコラプスのアニメーションを作ろう. コラプスの属性は以下の通り.
まあ今回はとりあえず簡易的にだんだん透明にしていくことにしておいて, ブロックを描画するときにコラプス中であればcounterに基づいて透明度を設定すればいい. コラプス中のブロックの扱い †むしろアニメーション自体よりこっちが問題である. ブロックは消去された瞬間に@blocklistから削除される. すると,消去されたブロックは描画されなくなってしまい,アニメもなにも無くなってしまう. ではコラプスが終わったらblocklistから削除すれば良いのでは? 実はこれもあまりいい作戦では無い.なぜなら消去されたブロックがblocklistに残っている以上,次のフェーズに進めないからだ. すなわちコラプスアニメーションが終わるまでただ座して待つしかない. これだと任意の長さのコラプスアニメが将来作れなくなり拡張性が無くなる. そこで次の方針をとる.
これによりコラプス中か判定するメソッドcollapse?を任意に変えることでコラプス終了のタイミングを調整でき,かつコラプスアニメーションをガン無視して次のフェーズに進んでも整合性は保たれる. class Field def init_blocklist @active_blocks = [] @collapse_blocks = [] end def eliminate_connection @connect_table.each do |connection| next if connection.size < 4 @eliminated = true # check flag connection.each do |block| block.set_collapse(40) @table[block.row][block.line] = nil @active_blocks.delete block @collapse_blocks.push block end end end end 実行 †いい感じにアニメーションできている. Loading the player ...
|