ページ 11

ショットの打ち方。

Posted: 2009年11月24日(火) 21:13
by sisi
現在2Dのアクションゲームを作ろうと思いやっているのですが。
処理しやすいようにしたりするためにプログラムを分けて記述するようにしたのですが
キャラからショットを打たせたいのですがうまくできません。

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

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

Re:ショットの打ち方。

Posted: 2009年11月24日(火) 21:20
by softya
とりあえず、ソースコードを見せてもらうと早いのでお願いします。
長いなら、添付でお願いします。

Re:ショットの打ち方。

Posted: 2009年11月24日(火) 23:31
by sisi
どのファイルをあげればいいのかわからなかったので.cppと.hのファイルを圧縮してあげておきます
現在していることは

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

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

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

Re:ショットの打ち方。

Posted: 2009年11月25日(水) 01:09
by softya
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;   //発射フラグを戻す                                                                 }
			}
		}
	}

としてください。

Re:ショットの打ち方。

Posted: 2009年11月25日(水) 02:51
by sisi
どうもありがとうございました。
おかげでちゃんと動きました。
なぜ今まで動かなかったのか理解できるような文章をありがとうございました