46 章

前回までgraph.cppのDrawGraphやDrawRotaGraph関数などの座標は全て

○○+FX+dn.x

のように、○○の他に決まって余計な部分を毎回かかないといけませんでした。

FXはフィールドを0,0より少し右下にするためにずらすX座標分です。

dn.xは画面がドーン!と揺れる時に揺らすためのx成分の座標がはいる変数です。

これらを毎回書くのは面倒であり、横に無駄にながくなったり見にくくなったりしていました。

例えば


void graph_item(){
	int i;
	for(i=0;i<ITEM_MAX;i++){
		if(item[i].flag==1){
                        DrawRotaGraphF(item[i].x+FX+dn.x,item[i].y+FY+dn.y,item[i].r.....);
                        DrawRotaGraphF(item[i].x+FX+dn.x,item[i].y+FY+dn.y,item[i].r.....);
                        DrawRotaGraphF(item[i].x+FX+dn.x,item[i].y+FY+dn.y,item[i].r.....);
                }
        }
}

この紫の部分は毎回書かないといけない部分で、無駄な部分でした。

ではそこで

「これを書かないといけない処理の時は、その部分を自動で追加してくれる関数を呼んでやればいいじゃないか」

と考えて見ます。

今回DrawRotaGraphF関数をフィールド上に表示するバージョンということで

DrawRotaGraphFdF という関数を作りました。今度からそれらの関数を使っていきましょう。

この関数の引数はいつもと同じです。ただこちらの関数を呼ぶと、座標を上記の部分だけ自動でずらして表示してくれます。

例えば上の関数を新しい関数に置き換えたのがこちらです。

void graph_item(){
        int i;
        for(i=0;i<ITEM_MAX;i++){
                if(item[i].flag==1){
                        DrawRotaGraphFdF(item[i].x,item[i].y,item[i].r....);
                        DrawRotaGraphFdF(item[i].x,item[i].y,item[i].r....);
                        DrawRotaGraphFdF(item[i].x,item[i].y,item[i].r....);
                }
        }
}

 
しかし手作業で全部変更していくのは大変ですね。

ここは「置換」という機能を使いましょう。

graph.cpp内にある

+FX
+FY
+dn.x
+dn.y

これらを全て消してください。

置換ウィンドウを出して、検索文字列に上記を書き、置換する部分に何も書かなければよいです。

次に同様にgraph.cpp内の以下を

DrawRotaGraphF → DrawRotaGraphFdF

DrawModiGraphF → DrawModiGraphFdF

このように置換します。

graph.cppのgraph_bullet()関数内のDrawGraphもDrawGraphFdにしておきます。

graph.cppの上に以下を追加します。


int DrawRotaGraphF( double xd, double yd, double ExRate, double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE  ) {
        return DrawRotaGraphF((float)xd,(float)yd,ExRate,Angle,GrHandle,TransFlag,TurnFlag);
}
int DrawModiGraphF( double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, int GrHandle, int TransFlag ){
        return DrawModiGraphF( (float)x1, (float)y1, (float)x2, (float)y2, (float)x3, (float)y3, (float)x4, (float)y4, GrHandle, TransFlag ) ;
}

int DrawRotaGraphFdF( double xd, double yd, double ExRate, double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE  ) {
        return DrawRotaGraphF((float)xd+FX+dn.x,(float)yd+FY+dn.y,ExRate,Angle,GrHandle,TransFlag,TurnFlag);
}
int DrawModiGraphFdF( double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, int GrHandle, int TransFlag ){
        return DrawModiGraphF( (float)x1+FX+dn.x, (float)y1+FY+dn.y, (float)x2+FX+dn.x, (float)y2+FY+dn.y, 
                (float)x3+FX+dn.x, (float)y3+FY+dn.y, (float)x4+FX+dn.x, (float)y4+FY+dn.y, GrHandle, TransFlag ) ;
}
int DrawGraphFd( int xd, int yd, int GrHandle, int TransFlag) {
        return DrawGraph(xd+FX+dn.x,yd+FY+dn.y,GrHandle,TransFlag);
}

これでおっけーです。

graph_back.cppの関数も変更しておきましょう。


#include "../include/GV.h"

extern int DrawGraphFd( int xd, int yd, int GrHandle, int TransFlag);

void graph_back00(){//通常背景
        SetDrawArea( FX , FY , FX+FMX , FY+FMY ) ;//描画可能エリアを設定
        DrawGraphFd(0,count%700-700,img_back[0],FALSE);
        DrawGraphFd(0,count%700    ,img_back[0],FALSE);
        SetDrawArea( 0, 0, 640, 480);//エリアを戻す
}

void graph_back01(){//スペルカード用背景
        SetDrawArea( FX , FY , FX+FMX , FY+FMY ) ;//描画可能エリアを設定
        DrawGraphFd(0,-count%480,img_back[11],FALSE);
        DrawGraphFd(0,-count%480+480,img_back[11],FALSE);
        DrawGraphFd(0,0,img_back[10],TRUE);
        SetDrawArea( 0, 0, 640, 480);//エリアを戻す
}

void graph_back_main(){
        //ボスがオンで、スペルカードなら
        if(boss.flag==1 && boss.back_knd[boss.knd]==1)
                graph_back01();
        else//それ以外
                graph_back00();
}


どうでしょう。今まで引数に渡していた

+FX+dn.x,
+FY+dn.y,

が全てなくなっただけで結構見やすくなったのではないでしょうか。



実行結果

今回動画はありません。何も見た目の変化はありません。


- Remical Soft -