もちろんエラーは出ていませんし、アクセス違反も出ていません。
下記のコードは着弾したときにその座標にエフェクト画像が連続して表示するものです。
この関数を呼び出すと、メインループに組み込まれたrefresh関数とdraw関数によって1フレームごとに一枚一枚画像を表示するものです。
①着弾する
②フラグを立て、着弾した座標情報を関数に渡して呼び出す。
③_フラグが立っているエフェクトのカウントが、画像の枚数を超えていたらそのエフェクトのフラグを0にする。
③_超えていなかったらカウントを増やす。
④フラグが立っているエフェクトのカウントにそった画像を表示する。
typedef struct{//全エフェクトに使う基本的な量産型構造体
int count;
double x;
double y;
int knd;
int flag;
}effect_hit_t;
void hit_effect_raise(double x,double y,int knd){//フラグを立てる関数。
switch(knd){
case 0://effectが呼び出されたので呼び出し位置を構造体に代入してフラグを立てる。
for(int k=0;k<EFFECT_MAX;k++){
if(effect_hit[k].flag==0){
effect_hit[k].flag=1;
effect_hit[k].x=x;
effect_hit[k].y=y;
effect_hit[k].knd=knd;
effect_hit[k].count=0;
break;
}
}
break;
default:
break;
}
}
void hit_effect_refresh(void){//フラグが立っているEFFECT構造体のカウントを増やす関数。(他種類対応
for(int i=0;i<EFFECT_MAX;i++){ //
if(effect_hit[i].flag==1){ //フラグが立っているeffect構造体を探して、
switch(effect_hit[i].knd){ //そのEFFECTの種類で分岐する
case 0:
if(effect_hit[i].count==EFFECT_NUMBER_1){//もしそのEFFECTのカウントがMAXまでされていたら(表現し終えていたら?)
effect_hit[i].flag=0;//フラグを0にする。
}else{
effect_hit[i].count++; //種類に関係なくカウントする。
}
break;
default:
break;
}
}
}
}
void hit_effect_draw(void){//フラグが立っているエフェクトを、EFFECT構造体のカウントに対応した画像を表示する。
for(int i=0;i<EFFECT_MAX;i++){
if(effect_hit[i].flag==1){ //フラグが立っているEFFECTを探す。
int j = effect_hit[i].count;//添字に使いやすいように変数に代入
switch(effect_hit[i].knd){ //そのEFFECTの種類で分岐する
case 0: //エフェクト1だったら
DrawRotaGraph( (int)effect_hit[i].x, (int)effect_hit[i].y, 1.0, PI, hit_effect_knd1[j], TRUE );//エフェクト1の、フラグが立っていたエフェクトカウント目の分割された画像を表示する。
break;
default:
break;
}
}
}
}