RexDK編 part 13

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

キャラクターの移動速度の高速化

実機で確認したところ、キャラクターの移動速度が予定していたほど速くないので、キャラクター移動速度が速くなるように変更して行きます。

キャラクターの移動速度を高速化するには次のような方法が考えられるので、これらを一つづつ検討して行きます。

1.無駄な処理を省く。

まず目についたのが、Homeキーによる終了処理です。
実際にゲームを行ってみると、殆ど無意味である事が判明したので、この処理自体を削除します。

次に、移動ルーチン内で行う必要の無い計算が数カ所見つかりました。
これを移動ルーチンの外に出してしまいます。


int Tmove(int Char_Y,int level){
int Char_X=240,Char_X_old,x;
int Char_Y_old,y;
int i,f,flag;
char str[10];

width=CharWidth*5;//キャラクター変更時に5を2に変更

    DsDisplayBlockClear(0,0,240,Scor_Y);
    
    f=1;
    do{
    if (Char_X < 0){
    DsDisplayBlockClear(0,Char_Y,width,CharHeight);
    }
    else{
    DsDisplayBlockClear(Char_X_old,Char_Y,width,CharHeight);
    }
    for(i=0;i < 5;i++){//キャラクター変更時に5を2に変更
        x=Char_X+i*CharWidth;
        if ((x >=0)&&(x <=232)){
        DsDisplayBitmapDraw( x, Char_Y, taro_bmps[i] , 0);
        }
    }

    x=Char_X;y=Char_Y;//width=CharWidth*5;を削除
    if(Char_X <0){
    x=0;width=CharWidth*5+Char_X;
    }
    DsSleep(level);
    DsTouchDataGet(p);
    if(((p.PointX > x)&&(p.PointX < x+width))&&
        ((p.PointY > Char_Y)&&(p.PointY < Char_Y+CharHeight))){
        scor++;
        DsDisplayBlockClear(Scor_X,Scor_Y,40,12);
        itoa(str,scor);DsPrintf(Scor_X,Scor_Y,0,str);
        if (Char_X < 0){
        DsDisplayBlockClear(0,Char_Y,width,CharHeight);
        }
        else{
        DsDisplayBlockClear(Char_X,Char_Y,width,CharHeight);
        }
        return 0;
    }
    p.PointX=255;p.PointY=255;
/*削除*/
//      DsReadMessage(msg,1);
//      if ((msg.message== MSG_DS_KEY_DOWN)&&(msg.sCode==KEY_TOP_C))
//       addin_end();

    Char_X_old = Char_X;
    Char_X -=CharWidth;
    if(Char_X < (-5*CharWidth))    f=0;//キャラクター変更時に5を2に変更

    }while(f);

        return 1;
}

このように変更しましたが、思ったほど速くなりません。

そこで、キャラクターを現状の8×26dot×5から16×18dot×2に変更しました。
これにより、ほぼ予定したレベルの速度を達成できました。

ここまでのソース

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