PuyoPuyoChap21
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[目次へもどる>PuyoPuyo]]
* もっとすばやく落とそう [#g15a75f3]
#contents
ぷよぷよフィーバー以降((ぷよぷよ7から))では,
ルールによっては上キーを入力することで,下キーよりも高速...
個人的にこの機能が大好きなので是非実装しよう.
まずはこの入力を受け付ける部分を実装しよう.
#sh(ruby){{
class Human < FieldController
def input_momentfall?
@ipt_ctrl.press?(:up)
end
end
}}
瞬間落下の入力を返すメソッド追加.簡単.
#sh(ruby){{
class FieldController
def update_control_block
inputs = [input_move_row?,input_rotate?,
input_fastfall?,input_momentfall?]
active = @field.update_control_block(*inputs)
@phase.change :falldown unless active
end
def input_momentfall?; false; end
end
}}
これも入力をコントロールブロックの更新処理に渡すだけ.簡...
さて,ここで瞬間入力があったときに何をするかを考えよう.
- 落下速度をものすごく上げる
- それ以降は回転処理を受け付けない
- 着地したとき,postponeは無視される
なるほど,これを実現するには瞬間落下の入力があったときに...
すなわち瞬間落下のフラグをたててしまうのが得策そうである.
#sh(ruby){{
class ControlBlock
attr_accessor :momentfall
def clear
@postpone = 0
@momentfall = false
end
end
}}
コントロールブロックにフラグを追加.
最後に処理のコア部分を追加しよう.
#sh(ruby){{
class Field
def update_control_block_rotate(ir)
return true if @cbm.ctrl_block.rotate?
return false if @cbm.ctrl_block.momentfall
rotate = @cbm.ctrl_block.can_rotate?(ir, @table, @row...
return false unless rotate
@cbm.ctrl_block.rotate(rotate, 8)
end
def update_control_block_move_y(iff,imf)
fall_y = @cbm.ctrl_block.can_falldown?(@table, @block...
if fall_y > 0 # fall
speed = iff ? 6 : 0.8
speed = imf || @cbm.ctrl_block.momentfall ? 64 : sp...
@cbm.ctrl_block.momentfall = true if imf
@cbm.ctrl_block.falldown(fall_y > speed ? speed : f...
elsif fall_y < 0 # dent
@cbm.ctrl_block.fix_dent(-fall_y)
else # postpone or land
if !iff && @cbm.ctrl_block.postpone? && !@cbm.ctrl_...
@cbm.ctrl_block.update_postpone
elsif !@cbm.ctrl_block.rotate?
control_block_land
return false
end
end
return true
end
end
}}
瞬間落下フラグが立っているときは回転できないようにして,
瞬間落下の入力があるか,瞬間落下フラグが立っているときは...
そして瞬間落下フラグが立っているときはpostponeの更新を無...
簡単に追加できた.
こんな風に些細な修正で新しい機能が追加できるのは設計が良...
** 実行 [#dc08daf2]
おお快適快適.
#media(PuyoPuyoChap21/PuyoPuyoChap21.flv);
終了行:
[[目次へもどる>PuyoPuyo]]
* もっとすばやく落とそう [#g15a75f3]
#contents
ぷよぷよフィーバー以降((ぷよぷよ7から))では,
ルールによっては上キーを入力することで,下キーよりも高速...
個人的にこの機能が大好きなので是非実装しよう.
まずはこの入力を受け付ける部分を実装しよう.
#sh(ruby){{
class Human < FieldController
def input_momentfall?
@ipt_ctrl.press?(:up)
end
end
}}
瞬間落下の入力を返すメソッド追加.簡単.
#sh(ruby){{
class FieldController
def update_control_block
inputs = [input_move_row?,input_rotate?,
input_fastfall?,input_momentfall?]
active = @field.update_control_block(*inputs)
@phase.change :falldown unless active
end
def input_momentfall?; false; end
end
}}
これも入力をコントロールブロックの更新処理に渡すだけ.簡...
さて,ここで瞬間入力があったときに何をするかを考えよう.
- 落下速度をものすごく上げる
- それ以降は回転処理を受け付けない
- 着地したとき,postponeは無視される
なるほど,これを実現するには瞬間落下の入力があったときに...
すなわち瞬間落下のフラグをたててしまうのが得策そうである.
#sh(ruby){{
class ControlBlock
attr_accessor :momentfall
def clear
@postpone = 0
@momentfall = false
end
end
}}
コントロールブロックにフラグを追加.
最後に処理のコア部分を追加しよう.
#sh(ruby){{
class Field
def update_control_block_rotate(ir)
return true if @cbm.ctrl_block.rotate?
return false if @cbm.ctrl_block.momentfall
rotate = @cbm.ctrl_block.can_rotate?(ir, @table, @row...
return false unless rotate
@cbm.ctrl_block.rotate(rotate, 8)
end
def update_control_block_move_y(iff,imf)
fall_y = @cbm.ctrl_block.can_falldown?(@table, @block...
if fall_y > 0 # fall
speed = iff ? 6 : 0.8
speed = imf || @cbm.ctrl_block.momentfall ? 64 : sp...
@cbm.ctrl_block.momentfall = true if imf
@cbm.ctrl_block.falldown(fall_y > speed ? speed : f...
elsif fall_y < 0 # dent
@cbm.ctrl_block.fix_dent(-fall_y)
else # postpone or land
if !iff && @cbm.ctrl_block.postpone? && !@cbm.ctrl_...
@cbm.ctrl_block.update_postpone
elsif !@cbm.ctrl_block.rotate?
control_block_land
return false
end
end
return true
end
end
}}
瞬間落下フラグが立っているときは回転できないようにして,
瞬間落下の入力があるか,瞬間落下フラグが立っているときは...
そして瞬間落下フラグが立っているときはpostponeの更新を無...
簡単に追加できた.
こんな風に些細な修正で新しい機能が追加できるのは設計が良...
** 実行 [#dc08daf2]
おお快適快適.
#media(PuyoPuyoChap21/PuyoPuyoChap21.flv);
ページ名: