Skip to content

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
    ...
  end

each_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? を使う)