//ショットの移動計算 #define CSOUT 20 //どれ位画面から外れたら消すか void calc_cshot(){ for(int i=0;i<CSHOT_MAX;i++){ if(cshot.flag==1){ cshot.x+=cos(cshot.angle)*cshot.spd; cshot.y+=sin(cshot.angle)*cshot.spd; if(cshot.x<-CSOUT || cshot.x>FIELD_MAX_X+CSOUT || cshot.y<-CSOUT || cshot[i].y>FIELD_MAX_Y+CSOUT)//画面から外れたら cshot[i].flag=0; } } }
、の中に"cshot[i].cnt++;"が無いため18章で自機ショットの当たり判定が発生しませんでした。
[/pre]//ショットの移動計算
#define CSOUT 20 //どのくらい画面から外れたら消すか
void calc_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot[i].flag==1){
cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd;
cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd;
cshot[i].cnt++;
if(cshot[i].x<-CSOUT || cshot[i].x>FIELD_MAX_X+CSOUT ||
cshot[i].y<-CSOUT || cshot[i].y>FIELD_MAX_Y+CSOUT)//画面から外れたら
cshot[i].flag=0;
}
}
}[/pre]
これでうまくいきました。
そしてダウンロードできるプロジェクトファイルの18章cshot.cpp
の中では、
//ショットの移動計算 void calc_cshot(){ for(int i=0;i<CSHOT_MAX;i++){ if(cshot[i].flag==1){ int dranx=cshot[i].spd+11/2,drany=cshot[i].spd+55/2; cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd; cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd; cshot[i].cnt++; if(cshot[i].x<-dranx || cshot[i].x>FIELD_MAX_X+dranx || cshot[i].y<-drany || cshot[i].y>FIELD_MAX_Y+drany)//画面から外れたら cshot[i].flag=0; } } }
こうなってたのですが、なんだか効率がよさそうですね。
解説が欲しいですがこの先にあるでしょうか。
int dranx=cshot[i].spd+11/2,drany=cshot[i].spd+55/2;
この計算について教えてください。