メガドライブのゲームの作り方 その12 - スプライト表示とコントローラー入力 | Arcade Cabinet

Arcade Cabinet

自作したゲームコントローラを紹介します

今回は「スプライト表示とコントローラー入力」です。

 

1)スプライト表示

 メガドライブでスプライトを表示するためには、画像表示と同じように3つの段階が必要です。

① VRAMに画像のタイルデータを読み込む。

② 画像のパレットを読み込む。

③ スプライトに表示したい画像を設定し、スプライトのサイズ、表示する座標を設定します。

 

●サンプルコード : test_03

ソースファイル一式

<main.c>

#include <genesis.h>

/* gfx.resで指定した画像(Sprite構造体)を読み込めるように設定 */

#include "gfx.h"

int main()

{

    /* VRAM処理中に割り込み処理が入るのを禁止 */

    SYS_disableInts();

    /* ①VRAMに画像をコピーします。 */

    VDP_loadTileSet(spr_player.animations[0]->frames[0]->tileset, TILE_USERINDEX, 0);

    /* ②画像のパレットを、1番目のパレット(PAL0)に読み込む */

    VDP_setPalette(PAL0, spr_player.palette->data);

    /* ③スプライトに画像を設定し、画面内に表示 */

    VDP_setSpriteFull(0, 100, 100, SPRITE_SIZE(2, 2), TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, TILE_USERINDEX), 1);

    /* 割り込みを可能に*/

    SYS_enableInts();

 

    while(1)

    {

        /* スプライトを描画 */

        VDP_updateSprites(1, TRUE);

 

        /* 1/60秒毎に発生するVSyncを待つ */

        VDP_waitVSync();

    }

    return (0);

}

<gfx.res>

/*   gr_player.pngをSprite構造体として読み込む */

SPRITE  spr_player  "gr_player.png" 2 2 -1

こんな感じで表示できれば成功です。

 

2)コントローラー入力

コントローラーからの入力の情報は、

u16 JOY_readJoypad(u16 joy)

で得ることが出来ます。

引数joyは読み取りたいコントローラーのタイプ(例えば1PのパッドはJOY_1)で、どのキーが押されているかの情報が戻り値として返されます。

 

●サンプルコード : test_04

ソースファイル一式

<main.c>

#include <genesis.h>

#include "gfx.h"

int main()

{

    /* プレイヤーのx軸の座標用の変数 */

    s16 iPosX = 100;

 

    SYS_disableInts();

    VDP_loadTileSet(spr_player.animations[0]->frames[0]->tileset, TILE_USERINDEX, 0);

    VDP_setPalette(PAL0, spr_player.palette->data);

    VDP_setSpriteFull(0, iPosX, 100, SPRITE_SIZE(2, 2), TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, TILE_USERINDEX), 1);

    SYS_enableInts();

 

    while(1)

    {

        /* 1Pのコントローラーの入力情報を変数valueに代入 */

        u16 value = JOY_readJoypad(JOY_1);

        /* 右方向キーが押されていたら、座標に1を加える */

        if     (value & BUTTON_RIGHT) iPosX += 1;

        /* 左方向キーが押されていたら、座標から1引く */

        else if(value & BUTTON_LEFT)  iPosX -= 1;

 

        /* スプライトの座標を変更 */

        VDP_setSpritePosition(0, iPosX, 100);

 

        VDP_updateSprites(1, TRUE);

        

        VDP_waitVSync();

    }

    return (0);

}

<gfx.res>

SPRITE  spr_player  "gr_player.png" 2 2 -1

コントローラーの左右のキーでキャラクターが動くはずです。

コントローラーのキーは、
BUTTON_UP
BUTTON_DOWN
BUTTON_LEFT
BUTTON_RIGHT
BUTTON_A
BUTTON_B
BUTTON_C
BUTTON_START
BUTTON_X 
BUTTON_Y
BUTTON_Z
BUTTON_MODE

のように設定されています。