3. 線と文字を描く
1 つずつ set するかわりに、線・四角・文字をまとめて描けます。
rb
▶ コンソールで開く# チュートリアル 3: 線と四角を描く。
require 'adventure_board'
GC.start
matrix = AdventureBoard.matrix
matrix.clear_drawing # 描く場所をまっさらにする
matrix.draw_rect(0, 0, 16, 16, 0xFF) # 四角(x, y, 幅, 高さ, 明るさ)
matrix.draw_line(0, 0, 15, 15, 0x60) # 線(始まりの x, y, 終わりの x, y, 明るさ)
matrix.draw_line(15, 0, 0, 15, 0x20)
matrix.blit # 描いたものを LED ドライバへコピー
matrix.show描いてからコピー
線や文字は、いったん 描くための場所(VRAM と呼びます)に描いてから、LEDドライバにコピーします。
| 命令 | すること |
|---|---|
clear_drawing | 描く場所をまっさらにします |
draw_rect(x, y, 幅, 高さ, 明るさ) | 四角の枠を描きます |
draw_line(x1, y1, x2, y2, 明るさ) | 線を描きます |
draw_text(文字, x, y) | 文字を描きます |
set_pixel(x, y, 明るさ) | 点を 1 つ描きます |
blit | 描いたものを LED マトリクスに写します |
show | LED に送ります(set のときと同じ) |
座標の数え方が違う
描く命令の座標は、左上が (0, 0)、右下が (15, 15) です(set は (1, 1) 〜 (16, 16))。
漢字を出す
16×16 の文字(フォント)が入っているので、漢字がちょうど 1 文字収まります。
rb
▶ コンソールで開く# チュートリアル 3: 漢字を 1 文字出す。
require 'adventure_board'
GC.start
matrix = AdventureBoard.matrix
matrix.clear_drawing
matrix.draw_text("冒")
matrix.blit
matrix.show文字を流す
16 ドットには 1 文字しか入らないので、長い文字は流して見せます。 draw_text の x を 1 ずつ減らしていくと、文字が左へ動きます。
rb
▶ コンソールで開く# チュートリアル 3: 文字を右から左へ流す。
require 'adventure_board'
GC.start
matrix = AdventureBoard.matrix
text = "ようこそ PicoRuby"
x = 16 # 右の外から始める
matrix.pen = 0xC0 # 文字の明るさ
while true
matrix.clear_drawing
matrix.draw_text(text, x, 0)
matrix.blit
matrix.show
x -= 1 # 1 ドット左へ
x = 16 if x < -(text.size * 16) # 流れきったら右へ戻す
sleep_ms 80
endmatrix.pen は、文字の明るさです(draw_text には明るさを渡せないので、先に決めておきます)。
text.size * 16 は、文字列の幅のだいたいの値です。漢字やひらがなは 16 ドット、英数字は 8 ドットの幅なので、 英数字が多いと、流れきってから右に戻るまで、何も出ていない時間が長くなります。
やってみよう
- 自分の名前を流してみましょう
draw_textの y を変えて、文字を上下にずらしてみましょう