ページ 11

STGで敵の移動を途中から円周にしたい

Posted: 2011年6月05日(日) 22:57
by YYSS
敵の移動を

直進→円を描く→直進

と言う風に行えるよう、頑張っていたのですが、躓いたので質問させていただきました。


一応形にはなったのですが、

コード:


//CEN_XとCEN_Yは画面の中心

	static int act, Angle = -90, R = 200;

	//直進
	if( act == 0 || act == 2 ){
		Enemy[num].X	= Enemy[num].X + 10;
		Enemy[num].Y	= CEN_Y	-200;
	}
	//回転
	else if( act == 1 ){
		Enemy[num].X	= CEN_X	+ cos( Angle * (PI / 180) ) * R;
		Enemy[num].Y	= CEN_Y	+ sin( Angle * (PI / 180) ) *R;
		Angle += 2;
	}
	//敵が中間に来たら回転許可
	if( Enemy[num].X >=  CEN_X && act == 0 ){
		act = 1;
	}
	//1週したらまた直進にもどる
	if( Angle >= 270 ){
	act = 2;
	}

これだと画面の中心を軸とした動きしかできません

説明だと分かりにくいと思うので添付画像も参考にしてください。



Y軸のどこから来ても画像のような動きをするようにしたいのです。

Re: STGで敵の移動を途中から円周にしたい

Posted: 2011年6月05日(日) 23:28
by YYSS
環境を書き忘れてました;;

~開発環境~
○Windows 7 Ultimate SP1
○Visual C++ 2010 Express
○DXライブラリ使用

Re: STGで敵の移動を途中から円周にしたい

Posted: 2011年6月05日(日) 23:52
by softya(ソフト屋)
試してませんが、こう言うことではないでしょうか?
Enemy[num].Y = CEN_Y + sin( Angle * (PI / 180) ) *R + R;

Re: STGで敵の移動を途中から円周にしたい

Posted: 2011年6月06日(月) 00:07
by ISLe
変更を最小限にするならこんなところでしょうか。

コード:

	//CEN_XとCEN_Yは画面の中心

	static int act, Angle = -90, R = 200;

	//直進
	if( act == 0 || act == 2 ) {
		Enemy[num].X    = Enemy[num].X + 10;
	}
	//回転
	else if( act == 1 ) {
		Enemy[num].X    = CEN_X + cos( Angle * (PI / 180) ) * R;
		Enemy[num].Y    = CEN_Y + sin( Angle * (PI / 180) ) * R;
		Angle += 2;
	}
	//敵が中間に来たら回転許可
	if( Enemy[num].X >=  CEN_X && act == 0 ) {
		act = 1;
		CEN_Y = Enemy[num].Y + R;
	}
	//1週したらまた直進にもどる
	if( Angle >= 270 ) {
		act = 2;
	}

Re: STGで敵の移動を途中から円周にしたい

Posted: 2011年6月06日(月) 00:11
by Tatu
敵がある形を組んで飛んできた時、その形が全く変わらないようにしたいのでしょうか?
それなら、回転移動の部分を

コード:

	//回転
	else if( act == 1 ) {
		//Angle+2の+2は角度の変化量から
		Enemy[num].X+=R*( cos( (Angle+2)*(PI/180) ) - cos( Angle*(PI/180) ) );
		Enemy[num].Y+=R*( sin( (Angle+2)*(PI/180) ) - sin( Angle*(PI/180) ) );
		Angle+=2;
	}
としたらどうですか?

これは移動前の座標と移動後の座標を任意の実数a,bを用いて表したとき、
それぞれ( a+R*cos(Angle),b+R*sin(Angle) )、
( a+R*cos(Angle+2),b+R*sin(Angle) )であるとし、
その差が移動量であると考えたものです。

Re: STGで敵の移動を途中から円周にしたい

Posted: 2011年6月09日(木) 00:46
by YYSS
回答ありがとうございます。

説明の仕方が悪くて申し訳ありません。

Tatuさんが教えてくださったように、どの位置でも形を崩さずに回転移動をさせたかったのです。


おかげで回転移動のさせ方の幅が広がりました。

ありがとうございました!