入力を処理しよう †コントロールブロックの大まかな流れは実装できたので,これを操作するための機構InputController?を作ろう. class InputController
@@keys = [:up, :down, :right, :left, :button1, :button2]
@@keymap = []
@@keymap[1] = { # Player1 keymap
:up => :w,
:down => :s,
:right => :d,
:left => :a,
:button1 => :f,
:button2 => :g
}
@@keymap[2] = { # Player2 keymap
:up => :up,
:down => :down,
:right => :right,
:left => :left,
:button1 => :numpad2,
:button2 => :numpad3
}
def initialize(player)
@player = player
@press_count = {}
@@keys.each do |key|
@press_count[key] = 0
end
end
def update
input_keys = StarRuby::Input.keys(:keyboard)
@@keys.each do |key|
if input_keys.include? @@keymap[@player][key]
@press_count[key] += 1
else
@press_count[key] = 0
end
end
end
def press?(key); @press_count[key] > 0; end
def trigger?(key); @press_count[key] == 1; end
end
まず入力キー一覧と各プレイヤーのキーマップをクラス変数で定義しておく. インスタンスの生成時にプレイヤー番号とキーそれぞれが何フレーム押されているかを記録する@press_countを作る. updateメソッドが呼ばれるとStarRuby?のInputモジュールを用いて現在押されているキーの一覧を取得する. これを用いて@press_countを更新する. |