ショットの打ち方。

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

ショットの打ち方。

#1

投稿記事 by sisi » 15年前

現在2Dのアクションゲームを作ろうと思いやっているのですが。
処理しやすいようにしたりするためにプログラムを分けて記述するようにしたのですが
キャラからショットを打たせたいのですがうまくできません。

キャラの座標がch.x、ch.yに入っていてそこから4方向にショットを打たせたいのですが
どのように記述すればいいのでしょうか?

プログラムの分け方はこのサイトを参考にさせていただいています。
旧サイトのほうでショットの打ち方の簡単な記述がありそれを実行するとちゃんと起動したのですが
プログラムをこの新しいサイトのように分けて書いた時に旧サイトのような簡単な
ショットを打つにはどうすればいいのでしょうか?

softya

Re:ショットの打ち方。

#2

投稿記事 by softya » 15年前

とりあえず、ソースコードを見せてもらうと早いのでお願いします。
長いなら、添付でお願いします。

sisi

Re:ショットの打ち方。

#3

投稿記事 by sisi » 15年前

どのファイルをあげればいいのかわからなかったので.cppと.hのファイルを圧縮してあげておきます
現在していることは

キャラの描写を八方向画像を2種類つかっている。
敵の描写 動きは今後付けていく

という感じですとりあえず今の段階ではショットを主人公
の座標からではなく下のほうから出せるかどうか試していたところです
とりあえず玉がボタンが押された時に表示されるのですが
飛んでいかないのです。

どうか原因を教えてください。

softya

Re:ショットの打ち方。

#4

投稿記事 by softya » 15年前

charshot()関数で
for(i=0;i<CSHOT_MAX;i++){
	cshot.flag=0;
	cshot.x=640/2;
	cshot.y=480;
}

は無条件に実行されています。
これだと毎フレーム、ショットが初期化されますので弾が続けて飛ぶ事はありませんので1フレームだけ弾が表示される事になると思います。この処理はini.cpp側に移してください。

それと
if(counter<5)
counter++;
も意味がありません。
counterがローカル変数ですので、charshot()の入ってすぐint counter=0,i;で0に初期化されます。
なので、必ずcounter<5条件を満たしてcounter++でcounterは1になります。これは毎フレーム同じです。
他にcounterを参照しているコードも無いので、counterは他に一切影響を与えていません。

5フレームだけ連続発射を禁止したいのであれば、まずcounterをグローバル変数にして、counter<5の場合は今の処理のままでよいので、
if( counter < 5 ) {
		counter++;
	} else {
		if(CheckStatePad(configpad.shot)>0){
	       counter=0;          //カウンターを戻す
			for(i=0;i<CSHOT_MAX;i++){             
				if(cshot.flag==0){     //発射していない玉を探し、
					cshot.flag=1;  //発射フラグを立てる
                	break;
            	}
	        }
		}
	}
	
	for(i=0;i<CSHOT_MAX;i++){
		if(cshot.flag==1){              //発射している玉なら
			cshot.y-=8;
			if(cshot.y < -32){      //もし画面外まで来たら
				cshot.y=480;    //初期値に戻し、
                cshot.flag=0;   //発射フラグを戻す                                                                 }
			}
		}
	}

としてください。

sisi

Re:ショットの打ち方。

#5

投稿記事 by sisi » 15年前

どうもありがとうございました。
おかげでちゃんと動きました。
なぜ今まで動かなかったのか理解できるような文章をありがとうございました

閉鎖

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