RexDK編 part 4

RexDKで、データスリム2のアドインを作る。

画像を動かす

画像ファイルの表示ができたので、これを動くようにプログラムを変更して行きます。

その前に、前項目で作ったプログラムの内容を解説しておきます。

#include <rex/rex.h>    //←Rex用のヘッダーファイルを指定しています。
#include <stdlib.h>

/*以下5分割したbitmapfileのデータを宣言しています。*/
const char taro1[] = 
{0x08,0x1a,0x02,0x01,0x01,0x00,0x00,0x05,0x1b,0x26,0x3e,0x67,0xad,0x57,
0x6f,0xff,0xff,0xff,0xbf,0xff,0x1f,0x0f,0x03,0x04,0x08,0x08,0x10,0x00};
const char taro2[] = 
{0x08,0x1a,0x00,0x00,0x03,0xbc,0xc3,0x3e,0xf0,0xab,0xd6,0x6d,0xbb,0xbf,
0xbf,0x80,0xbb,0xbf,0xbf,0x5f,0x7b,0x76,0xed,0xf7,0x0b,0x00,0x00,0x00};
const char taro3[] = 
{0x08,0x1a,0x20,0x40,0xff,0x86,0xff,0xbf,0xd6,0x6b,0xb5,0x5e,0xf5,0xff,
0xff,0x00,0xff,0xff,0xff,0xff,0xfd,0xff,0xd6,0x7f,0xa4,0xdb,0x20,0x10};
const char taro4[] = 
{0x08,0x1a,0x00,0x03,0xfc,0x25,0xf8,0xf6,0xdd,0x6b,0xae,0xf5,0xaa,0xff,
0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xdd,0xff,0xf8,0x06,0xeb,0x00,0x00};
const char taro5[] = 
{0x08,0x1a,0x00,0x80,0x00,0x00,0x00,0x00,0xc0,0x78,0xe4,0xbe,0xd7,0xab,
0xff,0x01,0xff,0xff,0xfa,0xf4,0x88,0xd0,0x20,0x80,0x00,0xa0,0x40,0x00};

/*以下多元配列が使えないので、上記データの先頭アドレスを配列化しています*/
char *taro_bmps[] = {
    taro1,
    taro2,
    taro3,
    taro4,
    taro5
};

/*ここからメインプログラムです。*/
main(){
int x=10;//画像のx座標用の変数を宣言し初期値を10としています
int y=20;//画像のy座標用の変数を宣言し初期値を20としています
int i;//ループ用の変数を宣言しています。

    DsDisplayBlockClear(0,0,240,120);//画面を消去しています。
/*以下のfor文で画像を8dotおきに表示します*/
    for(i=0;i<5;i++){
    DsDisplayBitmapDraw( x+i*8, y, taro_bmps[i] , 0);
    }

/*プログラムが終了しないように、無限ループを入れてあります。*/
    while(1){
    }

}    //この位置に改行コードを入れる事。

こんな感じで大した事は行っていません。

ここから画像を動かすプログラムを書きますが、その前に#define文で画面サイズとキャラクター(画像)のサイズを以下のように定義しておきました。

#define DispWidth 240
#define DispHeight 120
#define CharWidth 8
#define CharHeight 26

キャラクターを動ごかすアルゴリズムは、まず現在描画されているキャラクターを消し少し移動した位置に新しいキャラクターを描画する事の繰り返しで行います。

main(){
int x=200;
int y=20;
int i;

    DsDisplayBlockClear(0,0,240,120);

    while(x>0){           //xの値が0になるまで繰り返しを行います
    DsDisplayBlockClear(x,y,5*CharWidth,CharHeight);  //キャラクターの消去
    x -=CharWidth;        //xの値をCharWidth分だけ左に移動
        for(i=0;i<5;i++){ //キャラクターの描画
        DsDisplayBitmapDraw( x+i*CharWidth, y, taro_bmps[i] , 0);
        }
    }

/*プログラムが終了しないように、無限ループを入れてあります。*/
    while(1){
    }
}

こんな感じになります。

これで、ゴキブリが右から左に動くプログラムができました。

ここまでのソース

Copyright 2001-2002 Hideo Morotomi
感想、要望は、moro@deneb.freemail.ne.jp又は、掲示板へお願いします。
個人的にはMAILより掲示板に書きこんでもらえた方が嬉しいです。
当Web Site に関する補足事項