ruby/sdl を使って、Ruby から joystick を扱ってみる
require 'sdl'
SDL.init(SDL::INIT_JOYSTICK)
SDL::Joystick.num.times do |i|
p SDL::Joystick.index_name(i)
end
j = SDL::Joystick.open(0)
p j.num_axes
p j.num_buttons
p j.num_balls
p j.num_hats
prev = nil
loop do
SDL::Joystick.update_all
out = ''
j.num_axes.times do |i|
out << "%d:%06d " % [i, j.axis(i)]
end
j.num_hats.times do |i|
state = j.hat(i)
ret = [0, 0] # x, y
case state
when SDL::Joystick::HAT_CENTERED
ret = [0, 0]
when SDL::Joystick::HAT_UP
ret = [0, 1]
when SDL::Joystick::HAT_RIGHT
ret = [1, 0]
when SDL::Joystick::HAT_DOWN
ret = [0, -1]
when SDL::Joystick::HAT_LEFT
ret = [-1, 0]
when SDL::Joystick::HAT_RIGHTUP
ret = [1, 1]
when SDL::Joystick::HAT_RIGHTDOWN
ret = [1, -1]
when SDL::Joystick::HAT_LEFTUP
ret = [-1, 1]
when SDL::Joystick::HAT_LEFTDOWN
ret = [-1, -1]
end
out << ret.inspect
end
out << (0..j.num_buttons).select {|i| j.button(i) }.map {|i| i + 1}.inspect
unless prev == out
puts out
prev = out
end
sleep 0.1
end全然こっちのほうが簡単だなぁ。フォースフィードバック使えないのがちょっと寂しいかもしれない。
あと hat の返す値がちょっとめんどい。上のでは PyGame like にしてみた