イテレータを使って実装してみました
もとのスピードが遅いので、早くなった感覚はあまりしませんが
改善はされてます
//ここで弾の移動処理を行う。
std::deque<Bullet*>::iterator p;
p = bmanage.begin();
while( p != bmanage.end() )
{
(*p)->x += cos((*p)->angle*(*p)->spd);
(*p)->y += sin((*p)->angle*(*p)->spd);
(*p)->cnt++;
if( (*p)->cnt > (*p)->till ){
if( (*p)->x < -50 || (*p)->x > FIELD_MAX_X+50 ||
(*p)->y < -50 || (*p)->y > FIELD_MAX_Y+50 ){
(*p)->flag = 0;
}
}
p++;
}
/*
for(int i = 0; i < (int)bmanage.size(); ++i) {
if(bmanage->flag > 0){ //その弾が登録されていたら
bmanage->x += cos(bmanage->angle)*bmanage->spd;
bmanage->y += sin(bmanage->angle)*bmanage->spd;
bmanage->cnt++;
if(bmanage->cnt>bmanage->till){
if(bmanage[i]->x<-50 || bmanage[i]->x>FIELD_MAX_X+50 ||
bmanage[i]->y<-50 || bmanage[i]->y>FIELD_MAX_Y+50){//画面から外れたら
bmanage[i]->flag=0;//消す
}
}
}
}
*/
//弾のflagが0なら登録を解除する
p = bmanage.begin();
while( p != bmanage.end() )
{
if( (*p)->flag == 0 )
{
(*p)->~Bullet();
p = bmanage.erase(p);
}
else
p++;
}
/*
for(int j = 0; j < (int)bmanage.size(); ++j) {
if((bmanage[j]->flag) == 0) {
bmanage[j]->~Bullet();
char* memory = (char*)bmanage[j];
//delete bmanage[j];
bmanage.erase(bmanage.begin() + j);
bmem.push(memory);
memory = 0;
--j;
}
}
*/
//ボスの弾幕描画
void Boss::DrawBossBullet(){
SetDrawMode( DX_DRAWMODE_BILINEAR ) ;//線形補完描画
std::deque<Bullet*>::iterator p;
p = bmanage.begin();
while( p != bmanage.end() )
{
DrawRotaGraphF(
(*p)->x+FIELD_X, (*p)->y+FIELD_Y,
1.0, (*p)->angle+PI/2,
img_bullet[(*p)->knd][(*p)->co[/url], TRUE );
if( (*p)->eff == 1 )
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
p++;
}
/*
for(int l = 0; l < (int)bmanage.size(); ++l) {
DrawRotaGraphF(
bmanage[[/url]->x + FIELD_X, bmanage[[/url]->y + FIELD_Y,
1.0, bmanage[[/url]->angle + PI/2,
img_bullet[bmanage[[/url]->knd][bmanage[[/url]->co[/url],TRUE);
if(bmanage[[/url]->eff==1)
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
}
*/
SetDrawMode(DX_DRAWMODE_NEAREST);//描画形式を戻す
}
これで結構速くなったのですが、まだまだ改善するところはあるようです
boss->Move( stage_count, player );
のところです