分かり辛い部分を重点的に。
gb.titleScreen(F("myApp"),img);
雛形のとおり、二か所書く部分がある。
で、imgはどうするの?というところ、BitmapEncoderとかつかって作った画像データ(最後のカンマは外すように)をgamebuinoのスケッチに張り付けてそのデータ指定すればいいだけ。
で、まあデータがどうなってるかってとこなんだけど、普通にPC上で扱うような横に8bitのデータがずらずら並んでいる。GLCD特有の縦方向のデータではなく普通のあの画像データ。
大きさを指定するために先頭に大きさの情報が入っている。
const uint8_t test[] PROGMEM = {88,48,
0xFF,0xFF,0xF8,0x0,0x0,0x0,0x1,0x1F,0xF....
このように。
これは88x84という大きさに指定されていてノキア5110の表示領域84x48をオーバーしているけれど、それは1byte以下を指定できないので余った4bit部分をゼロでうめて1byteとしているから。
タイトル画面に表示できる画像サイズは、8x8~64x30。アプリ名を省略すると64x36までいける。オーバーしても別にエラーが出るわけではない。84x48の画像をタイトルに指定した結果が冒頭に貼り付けた写真。エラーは出ないけど表示されないデータを抱えるのもバカらしいので大きさは64x36までと覚えておこう。
ちなみにアプリ名を省略する場合
F("")
は省略しないように。これは必須とのこと。
公式のリファレンスでリンク切れになっている画像系APIの一つ。
ソースを眺めると、戻り値はboolean。
指定座標にピクセルがあるかどうかを判断するものらしい。
getPixelは指定座標の色を取得する。そういう違いのようだ。
gb.display.drawRoundRect
gb.display.fillRoundRect
まあ、角丸の四角をかくやつと中塗り潰すやつ。これは別にいいかな。
某所で見た。
デフォルトでは毎フレーム、ディスプレイメモリをクリアしているので表示を足してゆけない。
gb.display.persistence = true /false
で指定できる。デフォルトではtrueになっているはず?
見ての通りただのパブリック変数なので値の取得もできる。
気になる機能。
gb.display.getBuffer
ソースを見ると
uint8_t* Display::getBuffer()
この様にポインタ参照している。これはつまりどういうことかと言うと、わざわざ画面に書くためのメモリを確保して凝ったことしようとしなくてもアドレスをゲットして直接かいてやれば即画面に反映されるよということ。
高速描画したければ使わない手はない。(もともと速いんですが)