Class: RbSDL2::Keyboard::State
- Inherits:
-
Object
- Object
- RbSDL2::Keyboard::State
- Includes:
- Singleton
- Defined in:
- lib/rb_sdl2/keyboard/state.rb
Overview
SDL 内部にあるキーボードのキースイッチング配列へアクセスします。 キースイッチング状態は SDL_PumpEvents() が呼び出さられたときに更新されます。
Instance Attribute Summary collapse
-
#size ⇒ Object
(also: #length)
readonly
Returns the value of attribute size.
Instance Method Summary collapse
-
#[](nth) ⇒ Object
(also: #scancode?)
nth に該当するスキャンコードのキーが押されているか調べます。 nth のキーが押されている場合に nth を戻します。 nth のキーが押されていない、nth が範囲外の場合は nil を戻します。.
- #any? ⇒ Boolean
- #each ⇒ Object
-
#initialize ⇒ State
constructor
SDL ロード前に呼び出すとエラーになる。その際にインスタンスは作成されない。.
-
#to_a ⇒ Object
現在キーボードの押されている全てのキーに対応するスキャンコードを配列で戻します。.
- #to_str ⇒ Object
Constructor Details
#initialize ⇒ State
SDL ロード前に呼び出すとエラーになる。その際にインスタンスは作成されない。
10 11 12 13 14 15 16 17 18 |
# File 'lib/rb_sdl2/keyboard/state.rb', line 10 def initialize num_keys = ::FFI::MemoryPointer.new(:int) # SDL_GetKeyboardState() が戻すポインターは SDL がロードされた時点で作成されるため不変と考えてよい。 # この関数は SDL_Init() より前に呼ぶことができる。 # 引数に NULL ポインターを与えた場合にエラーを戻す。 @ptr = ::SDL.GetKeyboardState(num_keys) raise RbSDL2Error if @ptr.null? @size = num_keys.read_int end |
Instance Attribute Details
#size ⇒ Object (readonly) Also known as: length
Returns the value of attribute size.
30 31 32 |
# File 'lib/rb_sdl2/keyboard/state.rb', line 30 def size @size end |
Instance Method Details
#[](nth) ⇒ Object Also known as: scancode?
nth に該当するスキャンコードのキーが押されているか調べます。 nth のキーが押されている場合に nth を戻します。 nth のキーが押されていない、nth が範囲外の場合は nil を戻します。
23 |
# File 'lib/rb_sdl2/keyboard/state.rb', line 23 def [](nth) = 0 <= nth && nth < size && @ptr[nth].read_uint8 == ::SDL::PRESSED ? nth : nil |
#any? ⇒ Boolean
26 |
# File 'lib/rb_sdl2/keyboard/state.rb', line 26 def any? = to_str.bytes.any? { |n| n == ::SDL::PRESSED } |
#each ⇒ Object
28 |
# File 'lib/rb_sdl2/keyboard/state.rb', line 28 def each = block_given? ? size.times { |i| yield(self[i]) } : to_enum |
#to_a ⇒ Object
現在キーボードの押されている全てのキーに対応するスキャンコードを配列で戻します。
36 |
# File 'lib/rb_sdl2/keyboard/state.rb', line 36 def to_a = to_str.bytes.with_index.inject([]) { |a, (n, i)| n == ::SDL::PRESSED ? a << i : a } |
#to_str ⇒ Object
33 |
# File 'lib/rb_sdl2/keyboard/state.rb', line 33 def to_str = @ptr.read_bytes(size) |