WonderWitchでプログラム〜スプライトのアニメーション〜


目次に戻る


スプライトにアニメーションをさせたい場合は、アニメーションの各コマ用のグラフィックをあらかじめキャラクタに登録しておきます。そして、スプライトが指すキャラクタ番号を切り替えることでアニメーションを実装するのです。
 
今回のサンプルプログラムでは前回のようにtext_screen_init()関数を呼ぶのではなく背景を自分で初期化しています。方法はいたって単純で、背景用のキャラクタを用意し、画面全体をそのキャラクタで埋め尽くしただけです。
 
 
#makefile メイクファイル
# makefile for sprite_1
#

include ../makefile.inc

all: spr_1.fx

spr_1.fx: main.fx
 copy main.fx spr_1.fx
main.fx: main.bin
main.bin: main.obj
main.obj: main.c

main.cf cfファイル
name: sprite_1
info: スプライト表示2
mode: 7
source: main.bin
output: main.fx
/* main.c sprite_1のメインソース */
#include <sys/bios.h>

#include "arrow.h"

#define ANIMATION_TIME 30  /* スプライトの表示内容を切り替える時間 */

int main()
{
    int anime = 2; /* スプライトに設定するキャラクタ番号 */
    unsigned long lasttime = sys_get_tick_count(); /* 現在の時間を得ておく */

    display_control( DCM_SCR1 | DCM_SPR ); /*ディスプレイの設定。SCREEN1を使用し、スプライトを使用する。*/
    font_set_monodata( 0 , 4 , bmp_arrow ); /*bmp_arrow配列をキャラクタとして登録 */
    sprite_set_range(0,1); /* 使用するスプライトの数を設定 */

    screen_fill_char( 0 , 0 , 0 , SCREEN_CHAR_WIDTH , SCREEN_CHAR_HEIGHT , 0 ); /* 画面表示内容を初期化(画面全体をキャラクタ0で塗りつぶす) */

    sprite_set_char_location( 0 , anime , 10 , 10 ); /* 0番のスプライトにanime番のキャラクタを割り当て、表示位置は(10,10)にする */

 /* STARTボタンを押すまで繰り返す */
    while( key_press_check() != KEY_START ){
        unsigned long nowtime = sys_get_tick_count(); /* 現在の時間を得る */
        if( nowtime - lasttime > ANIMATION_TIME ){ /* スプライトの表示内容を切り替える時間がきたかどうか */
            lasttime = nowtime;
            anime = (anime == 2) ? 3 : 2; /* スプライト0に設定するキャラクタ番号を切り替える */
            sprite_set_char( 0 , anime ); /* スプライト0にanime番のキャラクタを割り当てる */
        }
    }

    return 0;
}

/* arrow.h  bmpcnvを使用して作成したグラフィックデータ */
#define arrow_width 2
#define arrow_height 2
unsigned char bmp_arrow[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 背景用 */
 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  /* 未使用 */
 0xC0, 0xF0, 0xFC, 0xFF, 0xFF, 0xFC, 0xF0, 0xC0,   /* 塗りつぶされた三角 */
 0x80, 0x10, 0x84, 0x01, 0x01, 0x84, 0x10, 0x80,   /* 白抜きされた三角 */
 


目次に戻る