ページ 11

着弾エフェクトが表示されない!?

Posted: 2011年8月21日(日) 02:58
by LisetteLander
構造体で作ったエフェクトがうんともすんとも言わないです!
もちろんエラーは出ていませんし、アクセス違反も出ていません。
下記のコードは着弾したときにその座標にエフェクト画像が連続して表示するものです。
この関数を呼び出すと、メインループに組み込まれたrefresh関数とdraw関数によって1フレームごとに一枚一枚画像を表示するものです。

①着弾する
②フラグを立て、着弾した座標情報を関数に渡して呼び出す。
③_フラグが立っているエフェクトのカウントが、画像の枚数を超えていたらそのエフェクトのフラグを0にする。
③_超えていなかったらカウントを増やす。
④フラグが立っているエフェクトのカウントにそった画像を表示する。

コード:

//フラグを立てる。//呼び出し方
hit_effect_raise(x,y,0);//座標、エフェクトの種類。今回は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;
			}
		}
	}	
}

Re: 着弾エフェクトが表示されない!?

Posted: 2011年8月21日(日) 11:50
by softya(ソフト屋)
とりあえずデバッグ法を試してみませんか?
動かない以上は原因がありますが、それを見て受けだすため基本テクニックです。

「簡単RPG講座 番外編。 デバッグ入門 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/blog.php?u=114&b=982&c=2

①着弾する
②フラグを立て、着弾した座標情報を関数に渡して呼び出す。
③_フラグが立っているエフェクトのカウントが、画像の枚数を超えていたらそのエフェクトのフラグを0にする。
④_超えていなかったらカウントを増やす。
⑤フラグが立っているエフェクトのカウントにそった画像を表示する。

①から⑤のポイントがちゃんと動いているか、まずprintfデバッグ法やブレークポイントで確認してみてください。

Re: 着弾エフェクトが表示されない!?

Posted: 2011年8月24日(水) 16:30
by LisetteLander
背景の裏に隠れてました・・・
この3日間無駄にすごした・・・
ソフト屋さん、ありがとうございました。