4. ボタンで操作する
十字ボタンで点を動かします。
rb
▶ コンソールで開く# チュートリアル 4: 十字ボタンで点を動かす。
# シミュレータでは画面のボタンか、キーボード(矢印キー / Z=A / X=B)。
require 'adventure_board'
GC.start
matrix = AdventureBoard.matrix
buttons = AdventureBoard.buttons
x = 8
y = 8
while true
buttons.each_press do |name| # 押されたボタンを 1 つずつ取り出す
x -= 1 if name == :left
x += 1 if name == :right
y -= 1 if name == :up
y += 1 if name == :down
end
x = 1 if x < 1 # はみ出さないように
x = 16 if 16 < x
y = 1 if y < 1
y = 16 if 16 < y
matrix.clear
matrix.set(x, y)
matrix.show
sleep_ms 30
endシミュレータでは、絵のボタンを押すか、キーボードの矢印キーで動きます。
押されたボタンを受け取る
ruby
buttons = AdventureBoard.buttonsボタンを取り出します。ボタンの名前は :up :down :left :right :a :b です。
ruby
buttons.each_press do |name|
x -= 1 if name == :left
...
endeach_press は、前に聞いたときから今までに押されたボタン を 1 つずつ取り出して、name に入れてくれます。 ボタンが押されたことは基板が覚えておいてくれるので、ループが遅くても、短く押しても取りこぼしません。
押しているあいだ
「押しているあいだずっと」を知りたいときは pressed? を使います。
rb
▶ コンソールで開く# チュートリアル 4: A を押しているあいだだけ光らせる。
require 'adventure_board'
GC.start
matrix = AdventureBoard.matrix
buttons = AdventureBoard.buttons
while true
if buttons.pressed?(:a) # A を押しているあいだ
matrix.fill(0x40) # 全部を暗く光らせる
else
matrix.clear
end
matrix.show
sleep_ms 30
end| 命令 | 返すもの |
|---|---|
each_press { |name| ... } | 押されたボタンを 1 回ずつ |
take_press | 押されたボタンを 1 つ(無ければ nil) |
pressed?(:a) | いま押されているか(true / false) |
pressed | いま押されているボタンの一覧 |
やってみよう
- A を押したら点を明るく、B で暗くしてみましょう
- 押しっぱなしで動き続けるようにしてみましょう(
pressed?を使う)