since : 2001.11.1 Junk Shop
DataSlim2's Room
RexDKで、データスリム2のアドインを作る。
実機で確認したところ、キャラクターの移動速度が予定していたほど速くないので、キャラクター移動速度が速くなるように変更して行きます。
キャラクターの移動速度を高速化するには次のような方法が考えられるので、これらを一つづつ検討して行きます。
まず目についたのが、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に変更しました。
これにより、ほぼ予定したレベルの速度を達成できました。