スプライトを表示する

画面上にスプライトを表示して動かします

2022-11-15
ResCompに関する記述を追加
2022-06-12
公開

コード

res_image.res

  1. PALETTE logo_palette "cblogo.png"
  2. SPRITE logo_sprite "cblogo.png" 18 5 BEST

main.c

  1. #include <genesis.h>
  2. #include "res_image.h"
  3.  
  4. #define SCREEN_WIDTH 320
  5. #define SCREEN_HEIGHT 224
  6.  
  7. int main(u16 hard) {
  8. // 経過時間
  9. u8 timer = 0;
  10. // ロゴ(スプライト)の位置
  11. s16 posX = 112;
  12. s16 posY = 96;
  13. // 移動速度
  14. s16 speedX = 1;
  15. s16 speedY = 2;
  16. // 移動方向
  17. s16 directionX = 1;
  18. s16 directionY = 1;
  19. // 移動範囲
  20. s16 maxWidth = SCREEN_WIDTH - 144; // 144: ロゴ幅
  21. s16 maxHeight = SCREEN_HEIGHT - 40; // 40: ロゴ高さ
  22.  
  23. // 色の設定
  24. PAL_setPaletteColors(0, &logo_palette, DMA);
  25.  
  26. // スプライトエンジンの初期化
  27. SPR_init();
  28.  
  29. // スプライトの追加と取得
  30. Sprite* logo = SPR_addSprite(&logo_sprite, posX, posY, TILE_ATTR(PAL0, TRUE, FALSE, FALSE));
  31.  
  32. // メインループ
  33. while (TRUE) {
  34. SYS_doVBlankProcess();
  35.  
  36. // 4フレームごとに更新する
  37. // NOTE: 「x & 3」は剰余演算「x % 4」と同じ
  38. // つまり4で割った余りが0以外の場合は処理を飛ばしている
  39. if (timer++ & 3) {
  40. continue;
  41. }
  42.  
  43. // スプライト更新(スプライトに対して行った変更が反映される)
  44. SPR_update();
  45.  
  46. // ロゴの移動先座標の設定
  47. posX += directionX * speedX;
  48. posY += directionY * speedY;
  49.  
  50. // ロゴを移動
  51. SPR_setPosition(logo, posX, posY);
  52.  
  53. // 画面端であれば移動方向を反転させておく
  54. if (posX <= 0 || posX >= maxWidth) {
  55. directionX *= -1;
  56. }
  57. if (posY <= 0 || posY >= maxHeight) {
  58. directionY *= -1;
  59. }
  60. }
  61.  
  62. return 0;
  63. }

実行結果

上記コードをSGDK1.70でコンパイルし
Gens v2.14 Souvenirで実行したスクリーンショット

解説

ResComp

画像ファイルをSGDK内で扱うには、ResComp1を利用します(利用せずに扱うことも可能です)。
ResCompの使用にはresファイルの作成(当ページではres_image.res)と、resファイルから作成されるヘッダファイル(.h)のインクルードが必要(当ページではmain.c 2行目)になります。

SPRITE

スプライトの1つのサイズはタイル単位で1x1から4x4までですが、SGDKではResCompを利用しSPRITEとして読み込むよう設定することで自動的に分割して配置され、移動や表示状態などの変更を1つの要素のように扱えます。
当ページではres_image.resの2行目の「18 5」がスプライトのサイズになります。18が横、5が縦のサイズ(タイル数)になります。
なお、スプライトはSPR_updateを実行しないと変更が画面に反映されません。

ダウンロード

1画像や音楽データをSGDKコード内で使える形に変換してくれるツールです。
様々な形式に対応しており、また各形式によって指定できるオプションが異なるため、rescomp.txt(sgdk\bin\rescomp.txt)を確認することを推奨します。