シューティングでの弾の連射

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Chalaza

シューティングでの弾の連射

#1

投稿記事 by Chalaza » 14年前

横スクロールシューティングでの連射する弾の処理についてなのですが、
ゲームプログラミングwiki(http://www.c3.club.kyutech.ac.jp/gamewi ... 4%C0%A4%B9)の『弾を撃つためにボタンを連打する』を参考にさせてもらって作ってみたのですが、まず弾の画像すらでないので困っています。
10個分の弾を構造体にしてfor文で10個を管理して撃ってるつもりなのですが、どこがおかしいでしょうか?

AcountというのはゲームパッドのAボタンを押している間増えるカウントに直したものです。

コード:

//弾の移動と連射用カウント
void Run(Player_t *Player, Tama_t *Tama)
{
   //連打しないと撃てない仕組み
   if(Acount == 1 && Osituduke == 0)
   {   
       Bullet( Player ,Tama);       //ここで弾を発生
       Osituduke = 1;
   }
   Osituduke = Acount;
   
   //弾の移動
   for(int i = 0; i < 10; i++)
   {
	   if(Tama->Flag[i] == 1)
       {
           Tama->X[i] = Tama->X[i] + 5;
       }
   }   

   //連射カウントを引いていく
   if(TamaCount > 0)
   {
       TamaCount-=1;
   }
}


//弾を発生させる
void Bullet(Player_t *Player,Tama_t *Tama )
{
   if(TamaCount== 0)//連射カウントが0になったら発射
   {
       for(int i = 0; i < 10; i++)
       {
           if(Tama->Flag[i] == 0)
           {
               //弾の初期化
               Tama->Flag[i] = 1;
               Tama->X[i] = Player->X+128;
               Tama->Y[i] = Player->Y+32;
               TamaCount = 10;
			   Tama->Img[i]=BlueShotImg;
               break;
           }
	   }
   }
}


// 描画する
void Player_Graph( Player_t Player ,Tama_t Tama  ){
        DrawGraph( Player.ViewX,  Player.Y, Player.Img, TRUE );

		for(int i = 0; i < 10; i++)
		{
			if(Tama.Flag[i] == 1)
			{
				DrawGraph( Tama.X[i],  Tama.Y[i], Tama.Img[i], TRUE );
			}
		}
		
}

////////////Main関数内/////////////////////
	Player_t Player;
	Tama_t Tama;
	Player_Initialize( &Player );// 初期化
	Map_Initialize();

	while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){

		Keyboard_Update();

		Player_Input();//入力をカウントへ

		Player_Calc(&Player ,&Tama);  // 計算

		Run(&Player ,&Tama);
		Bullet(&Player ,&Tama);
		Map_Scroll( &Player );

		Map_Graph();
		Player_Graph(Player, Tama); // 描画

	}

	Player_Finalize(Player ,Tama);  // 終了処理

	DxLib_End();
	return 0;
}


アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: シューティングでの弾の連射

#2

投稿記事 by softya(ソフト屋) » 14年前

とりあえずBullet関数が呼び出されているか、弾の初期化が行われているか、Tama.Flag == 1になっているかどうか、DrawGraph( Tama.X, Tama.Y, Tama.Img, TRUE );が実行されたかどうか順番にデバッガでブレークポイントを設定して調べてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Chalaza

Re: シューティングでの弾の連射

#3

投稿記事 by Chalaza » 14年前

すみません。ただ初期値が決められていなかっただけでした。
直したら綺麗に弾が撃てるようになりました。解決です。迷惑かけました。

閉鎖

“C言語何でも質問掲示板” へ戻る