具体的には、
・異なる敵が連続して(短い間隔で)弾を発射すると、敵弾が全て画面外に出ても敵弾の組のフラグが消えない。
・すこし長めの間隔で敵が弾を発射したときは、ある程度フラグ処理がうまく行われる。
ということです。
・敵が単体の場合は処理がうまくいく。(たとえ何度も違う敵弾の組のフラグを立てた場合でも)
言葉だけではわからないと思いますので、敵弾の処理の部分のプログラムを載せておきます。
void enemy_shot_display(){
for(int i=0;i<EnemyTotal;i++){
if(EnemyShotGroup.flag==1 || EnemyShotGroup.flag==2){
EnemyShotGroup.counter++;
for(int j=0;j<EnemyShotTotal;j++){
if(EnemyShotGroup.EnemyShot[j].flag==1 || EnemyShotGroup.EnemyShot[j].flag==2){
SetDrawBlendMode(DX_BLENDMODE_ADD,256);
if(EnemyShotGroup.EnemyShot[j].img==83 || EnemyShotGroup.EnemyShot[j].img==84 || EnemyShotGroup.EnemyShot[j].img==85){
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 );
}
DrawRotaGraph((int)EnemyShotGroup.EnemyShot[j].x,(int)EnemyShotGroup.EnemyShot[j].y,1.0f,EnemyShotGroup[i].EnemyShot[j].display_angle,image_enemy_shot[EnemyShotGroup[i].EnemyShot[j].img],TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);
if(EnemyShotGroup[i].EnemyShot[j].x<-20.0 || EnemyShotGroup[i].EnemyShot[j].x>440.0 || EnemyShotGroup[i].EnemyShot[j].y<-20.0 || EnemyShotGroup[i].EnemyShot[j].y>500.0){
EnemyShotGroup[i].EnemyShot[j].flag=0;
}
}
}
}
}
for(int i=0;i<EnemyTotal;i++){
if(EnemyShotGroup[i].flag==1 || EnemyShotGroup[i].flag==2){
for(int j=0;j<EnemyShotTotal;j++){
if(EnemyShotGroup[i].EnemyShot[j].flag==1 || EnemyShotGroup[i].EnemyShot[j].flag==2){
return;
}
}
for(int j=0;j<EnemyShotTotal;j++){
EnemyShotGroup[i].EnemyShot[j].graze=1;
}
EnemyShotGroup[i].flag=0;
}
}
}ちなみに、この部分はシューティングの館のプログラムを参考にして作ってあります。
敵弾の存在フラグが2となっているのは、敵を撃破したときの敵弾の存在フラグです。
説明不足でしたら、ゲーム本体または、使っている全てのcppファイル、hファイルをUPすることも考えています。
よろしくお願いします。