はじめまして
シューティングゲームの館を見ながらシューテングゲーム制作に挑戦しています
18章の コードなのですが少し改造して
1回のEnemyPatternで2回ショットを撃たせようと思っているのですが
るにはどうすればいいでしょうか?
void EnemyPattern(int i){
int j;
if(enemy.counter<50)
enemy.y+=4.0f;
if(enemy.counter==75){
for(j=0;j<ENEMY_TOTAL_NUM;j++)
if(EnemyShot[j].flag==0)
break;
EnemyShot[j].mem_ex=enemy.x;
EnemyShot[j].mem_ey=enemy.y;
EnemyShot[j].mem_px=Player.x;
EnemyShot[j].mem_py=Player.y;
EnemyShot[j].counter=0;
EnemyShot[j].flag=1;
EnemyShot[j].pattern=1;
EnemyShot[j].img=0;
}
if(enemy.counter>76 && enemy.counter<95)
enemy.x+=2.0f;
if(enemy.counter==100){
for(j=0;j<ENEMY_TOTAL_NUM;j++)
if(EnemyShot[j].flag==0)
break;
EnemyShot[j].mem_ex=enemy.x;
EnemyShot[j].mem_ey=enemy[i].y;
EnemyShot[j].mem_px=Player.x;
EnemyShot[j].mem_py=Player.y;
EnemyShot[j].counter=0;
EnemyShot[j].flag=1;
EnemyShot[j].pattern=1;
EnemyShot[j].img=0;
}
if(enemy[i].counter>100){
enemy[i].y-=2.0f;
}
DrawFormatString(0,0,color_White,"EnemyShot[%d]flag",EnemyShot[i].flag);
}
counterが100になる前に弾に当たってフラグを消すと
ちゃんとcounter100は実行されます
シューティングゲームの館の18章の質問
Re:シューティングゲームの館の18章の質問
EnemyShot.EnemyShots[○].flag
で弾のフラグを上げています。
○の部分を一つずつ増やしていけばいいですよ。
EnemyShot.EnemyShots[0].flag=1
にすると[0]番の弾がオンになります。
EnemyShot.EnemyShots[1].flag=1
にすると[1]番の弾がオンになります。
登録時には初期座標など初期設定をしてやります。
後、登録部、計算部は分けた方が汎用的ですね。
ホントわかりにくいですよね。
皆さんには迷惑かけています。すみません(_ _|||)
で弾のフラグを上げています。
○の部分を一つずつ増やしていけばいいですよ。
EnemyShot.EnemyShots[0].flag=1
にすると[0]番の弾がオンになります。
EnemyShot.EnemyShots[1].flag=1
にすると[1]番の弾がオンになります。
登録時には初期座標など初期設定をしてやります。
後、登録部、計算部は分けた方が汎用的ですね。
ホントわかりにくいですよね。
皆さんには迷惑かけています。すみません(_ _|||)
Re:シューティングゲームの館の18章の質問
回答ありがとうございます
ひとつのパターンで 2回弾を発射させることには成功しましたが
2つの弾は発射された座標から動かずにそのまま停滞してしまいました
↓のように変えてみたのですが
/**enemy_shot.cpp**/
void EnemyShotPattern1(int i){
if(EnemyShot.counter==0 && enemy.flag==1){
EnemyShot.EnemyShots[m].flag=1;
EnemyShot.EnemyShots[m].x=EnemyShot.mem_ex;
EnemyShot.EnemyShots[m].y=EnemyShot.mem_ey;
EnemyShot.Angle[0] = atan2(EnemyShot.mem_py-EnemyShot.mem_ey,
EnemyShot[i].mem_px-EnemyShot[i].mem_ex);
PlaySoundMem(sound_enemy_shot,DX_PLAYTYPE_BACK);
m+=1;//mの値1UP
}
EnemyShot[i].EnemyShots[m].x+=PATTERN1SPEED*cos(EnemyShot[i].Angle[0]);
EnemyShot[i].EnemyShots[m].y+=PATTERN1SPEED*sin(EnemyShot[i].Angle[0]);
// DrawFormatString(0,100,color_White,"[%d]flag",m);
}
/*enemy.cpp*/
void EnemyPattern(int i){
int j;
if(enemy[i].counter<50)
enemy[i].y+=4.0f;
if(enemy[i].counter==75){
for(j=0;j<ENEMY_TOTAL_NUM;j++)
if(EnemyShot[j].EnemyShots[m].flag==0)
break;
EnemyShot[j].mem_ex=enemy[i].x;
EnemyShot[j].mem_ey=enemy[i].y;
EnemyShot[j].mem_px=Player.x;
EnemyShot[j].mem_py=Player.y;
EnemyShot[j].counter=0;
EnemyShot[j].flag=1;
EnemyShot[j].pattern=1;
EnemyShot[j].img=0;
}
if(enemy[i].counter>76 && enemy[i].counter<95)
enemy[i].x+=2.0f;
if(enemy[i].counter==100){
for(j=0;j<ENEMY_TOTAL_NUM;j++)
if(EnemyShot[j].EnemySHot.flag==0)
break;
EnemyShot[j].mem_ex=enemy[i].x;
EnemyShot[j].mem_ey=enemy[i].y;
EnemyShot[j].mem_px=Player.x;
EnemyShot[j].mem_py=Player.y;
EnemyShot[j].counter=0;
EnemyShot[j].flag=1;
EnemyShot[j].pattern=1;
EnemyShot[j].img=0;
}
}
m は別の所で最初に0にしてあります
EnemyShot[i].EnemyShoys[m].flag の m の値を1つ1つあげてるつもりなのですが
回答お願いします
ひとつのパターンで 2回弾を発射させることには成功しましたが
2つの弾は発射された座標から動かずにそのまま停滞してしまいました
↓のように変えてみたのですが
/**enemy_shot.cpp**/
void EnemyShotPattern1(int i){
if(EnemyShot.counter==0 && enemy.flag==1){
EnemyShot.EnemyShots[m].flag=1;
EnemyShot.EnemyShots[m].x=EnemyShot.mem_ex;
EnemyShot.EnemyShots[m].y=EnemyShot.mem_ey;
EnemyShot.Angle[0] = atan2(EnemyShot.mem_py-EnemyShot.mem_ey,
EnemyShot[i].mem_px-EnemyShot[i].mem_ex);
PlaySoundMem(sound_enemy_shot,DX_PLAYTYPE_BACK);
m+=1;//mの値1UP
}
EnemyShot[i].EnemyShots[m].x+=PATTERN1SPEED*cos(EnemyShot[i].Angle[0]);
EnemyShot[i].EnemyShots[m].y+=PATTERN1SPEED*sin(EnemyShot[i].Angle[0]);
// DrawFormatString(0,100,color_White,"[%d]flag",m);
}
/*enemy.cpp*/
void EnemyPattern(int i){
int j;
if(enemy[i].counter<50)
enemy[i].y+=4.0f;
if(enemy[i].counter==75){
for(j=0;j<ENEMY_TOTAL_NUM;j++)
if(EnemyShot[j].EnemyShots[m].flag==0)
break;
EnemyShot[j].mem_ex=enemy[i].x;
EnemyShot[j].mem_ey=enemy[i].y;
EnemyShot[j].mem_px=Player.x;
EnemyShot[j].mem_py=Player.y;
EnemyShot[j].counter=0;
EnemyShot[j].flag=1;
EnemyShot[j].pattern=1;
EnemyShot[j].img=0;
}
if(enemy[i].counter>76 && enemy[i].counter<95)
enemy[i].x+=2.0f;
if(enemy[i].counter==100){
for(j=0;j<ENEMY_TOTAL_NUM;j++)
if(EnemyShot[j].EnemySHot.flag==0)
break;
EnemyShot[j].mem_ex=enemy[i].x;
EnemyShot[j].mem_ey=enemy[i].y;
EnemyShot[j].mem_px=Player.x;
EnemyShot[j].mem_py=Player.y;
EnemyShot[j].counter=0;
EnemyShot[j].flag=1;
EnemyShot[j].pattern=1;
EnemyShot[j].img=0;
}
}
m は別の所で最初に0にしてあります
EnemyShot[i].EnemyShoys[m].flag の m の値を1つ1つあげてるつもりなのですが
回答お願いします