スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Ruby/SDL : キーボードの扱いについて(ほぼ転載)

2006-12-20
■ [Ruby/SDL] キーボード情報の扱い(Ver.2)
danさんのところで話がでてたので、思い出したように書いてみる。

前回から紆余曲折を経て、現在はこんな感じになってます。最初にキーと通称(symbol)の対応を定義しておいて、以降のコードでは通称のみを使います。こうすると、ゲーム内では「:up」というシンボル一つで「上キーとKキー*1とジョイパッドの上方向」をまとめて扱うことが出来て便利です。

class Input
#ユーザ用
define_key SDL::Key::ESCAPE, :exit
define_key SDL::Key::UP , :up
define_key SDL::Key::DOWN , :down
define_key SDL::Key::LEFT , :left
define_key SDL::Key::RIGHT , :right
define_key SDL::Key::K , :up
define_key SDL::Key::J , :down
define_key SDL::Key::H , :left
define_key SDL::Key::L , :right
define_key SDL::Key::RETURN, :ok
define_key SDL::Key::Z , :ok
define_key SDL::Key::X , :cancel
define_pad 1, :ok # ○
define_pad 2, :cancel # ×

#NF用
define_key SDL::Key::F1, :reset
define_key SDL::Key::F10, :goal

if DEBUG_MODE
#デバッグ用(そのうち消す)
define_key SDL::Key::W , :toggle_window
define_key SDL::Key::K0 , :fast_move
define_key SDL::Key::V , :event_sample

#製作補助用
define_key SDL::Key::R , :reload_images
define_key SDL::Key::I , :inspect
define_key SDL::Key::A , :auto_reload
define_key SDL::Key::Y , :inspect_events

#マップエディタ用
define_pad 3, :put_chip # □
define_pad 0, :erase_chip # △
define_pad 9, :yuutai # select
define_pad 6, :prev_chip # L1
define_pad 7, :next_chip # R1
define_key_shift SDL::Key::K1, :force_encount #!
define_key SDL::Key::B , :set_base_chip
define_key SDL::Key::P , :put_chip
define_key SDL::Key::G , :get_chip
define_key SDL::Key::E , :erase_chip
define_key SDL::Key::COMMA , :prev_chip, :repeats
define_key SDL::Key::PERIOD, :next_chip, :repeats
define_key SDL::Key::S , :save_map
define_key SDL::Key::U , :yuutai
define_key SDL::Key::TAB , :next_capital
end
end


定義用メソッド(Rails風?)には以下のような種類があります。

define_key キー定数, シンボル
キーを定義する
define_key キー定数, シンボル, :repeats
キーを定義する(擬似キーリピートあり)
define_key_shift キー定数, シンボル
シフト+キーを定義する(ctrl,alt,metaもあるよ!)
define_pad ボタン番号, シンボル
パッドのボタンを定義する
パッドの上下左右は、自動的に :up, :down, :left, :right というシンボルに対応づけられます。固定です。

使い方は

input = Input.new
loop do
input.clear #12/23追記:これを忘れてました。すいません
input.poll

input[:up] #=>「上が押されていたか」
input.pushed? :ok #=>「OKボタンが押されたか」
..
end


という感じで、実装はinput.rbに記述。

*1 roguelike風

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。