1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Arduboy2ライブラリのスプライトフォーマットはちょっと不思議

Last updated at Posted at 2017-05-07

Arduboyをさわり始めた。
パタパタアニメを楽に実装しようと思うとフレーム指定で描画を切り替えられるスプライトを使いたくなる。
ろくにドキュメントを読まないとまずはまる点はスプライトのデータはArduboy.drawSlowXYBitmap()で使用するビットマップデータとは形式が違うということ。

開発フォーラムにスプライト用のデータを出力できるツールの投稿があった。
これを使って変換すればデータを得ることができる。
もちろん他にも存在すると思う。
ともあれこのツールのおかげでデータの構成を把握することができた。

データの基本構造は

  • 1バイト目: スプライトの幅
  • 2バイト目: スプライトの高さ
  • 3バイト目以降がスプライトのビットマップデータ ✕ N

となる。
マスクデータも同時に保持する形式もあるが今回はSprites.drawSelfMasked()で使用するデータを想定。(なお複雑な画像を重ねるゲームの場合はおそらくマスクデータをきちんと使いこなす必要がある)

ツールを使っていれば特に気にすることもないと思うがビットマップデータの変換ルールが独特な点をちょっと解説。

次のような画像があったとする。
t.png

Arduboy.drawSlowXYBitmap()用のビットマップはこの向きのまま左上から0/1に変換すればよい。
ところがSprites.drawSelfMasked()用のビットマップはちょっとおもしろい変換ルールになっている。
先ほどの画像は次のように左に90度回転した上で8ピクセル毎の垂れ幕の様に切り出して0/1に変換する。
t-turned.png

なんだかちょっと不思議なフォーマットで将来的に改良されるかもしれないが2017/05/07時点では上記の通り。

私は絵を修正するたびにGUIツールを使うのは面倒なので自分用にコマンドラインツールを作ってしまった。なお機能的にはまだ最低限。ドキュメントもないという惨状。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?