具体的には、
・異なる敵が連続して(短い間隔で)弾を発射すると、敵弾が全て画面外に出ても敵弾の組のフラグが消えない。
・すこし長めの間隔で敵が弾を発射したときは、ある程度フラグ処理がうまく行われる。
ということです。
・敵が単体の場合は処理がうまくいく。(たとえ何度も違う敵弾の組のフラグを立てた場合でも)
言葉だけではわからないと思いますので、敵弾の処理の部分のプログラムを載せておきます。
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することも考えています。
よろしくお願いします。