背景画像を表示する
背景画像を画面に表示し、少しずらします
- 2022-11-15
- 画像、ResCompに関する記述を追加
- 2022-06-12
- 公開
コード
res_image.res
- PALETTE bg_palette "kyotosi_title.png"
- TILESET bg_tileset "kyotosi_title.png" NONE ALL
- MAP bg_map "kyotosi_title.png" bg_tileset NONE
main.c
- #include <genesis.h>
- #include "res_image.h"
- int main(u16 hard) {
- // タイルの初期位置
- u16 index = TILE_USERINDEX;
- // 背景画像のタイル情報セットを読み込む
- VDP_loadTileSet(&bg_tileset, index, DMA);
- // 背景画像のパレット情報(色)を設定する
- PAL_setPalette(PAL0, bg_palette.data, DMA);
- // Map構造体をBG_Aプレーンに作成する
- Map* bg = MAP_create(&bg_map, BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, index));
- // 指定位置に背景を移動させたい場合(タイル単位、右下が基準、左上方向が正)
- MAP_scrollTo(bg, 1, 2);
- // メインループ
- while (TRUE) {
- SYS_doVBlankProcess();
- }
- // Map構造体をメモリから解放する
- MEM_free(bg);
- return 0;
- }
実行結果
上記コードをSGDK1.70でコンパイルし
Gens v2.14 Souvenirで実行したスクリーンショット
解説
画像
メガドライブ(Genesis)は16色を1セットとするパレットを4つ使うことが出来ます。
当コードでは背景を1パレットだけ使用して表示するために、フルカラー写真から16色に減色した画像を用意しました。
保存形式はPNG(8bit)です。BMP画像も使用できますが、こちらも8bitでなければいけません。
ResComp
画像ファイルをSGDK内で扱うには、ResComp1を利用します(利用せずに扱うことも可能です)。
ResCompの使用にはresファイルの作成(当ページではres_image.res)と、resファイルから作成されるヘッダファイル(.h)のインクルードが必要(当ページではmain.c 2行目)になります。
背景(MAP)
公式wikiによると、使いやすくて大きな背景マップを処理できるので、標準でMAP APIを使うべきとのことです。
SGDKに同梱されているサンプル「sonic」では実際に10240x1280ピクセルという巨大な画像ファイルを読み込んでいます。
23行目のMEM_free命令には到達しないのでなくても良いのですが、一応「sonic」に合わせて記述しています。
ダウンロード
1画像や音楽データをSGDKコード内で使える形に変換してくれるツールです。
様々な形式に対応しており、また各形式によって指定できるオプションが異なるため、rescomp.txt(sgdk\bin\rescomp.txt)を確認することを推奨します。