ページ 11

シューティングゲームの館の18章の質問

Posted: 2007年11月15日(木) 15:48
by 鷹見 ソラ
はじめまして 

シューティングゲームの館を見ながらシューテングゲーム制作に挑戦しています
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は実行されます

Re:シューティングゲームの館の18章の質問

Posted: 2007年11月16日(金) 00:28
by 管理人
EnemyShot.EnemyShots[○].flag
で弾のフラグを上げています。
○の部分を一つずつ増やしていけばいいですよ。
EnemyShot.EnemyShots[0].flag=1
にすると[0]番の弾がオンになります。
EnemyShot.EnemyShots[1].flag=1
にすると[1]番の弾がオンになります。
登録時には初期座標など初期設定をしてやります。
後、登録部、計算部は分けた方が汎用的ですね。
ホントわかりにくいですよね。
皆さんには迷惑かけています。すみません(_ _|||)

Re:シューティングゲームの館の18章の質問

Posted: 2007年11月16日(金) 11:08
by 鷹見 ソラ
回答ありがとうございます

ひとつのパターンで 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つあげてるつもりなのですが

回答お願いします

Re:シューティングゲームの館の18章の質問

Posted: 2007年12月04日(火) 06:09
by 鷹見 ソラ
すみません この場所以外の所が間違っていたようです一番上のコードでも動きました
お騒がせしました本当にありがとうございます