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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

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

#1

投稿記事 by YYSS » 9年前

敵の移動を

直進→円を描く→直進

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


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

コード:


//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軸のどこから来ても画像のような動きをするようにしたいのです。
添付ファイル
move.png
move.png (8.97 KiB) 閲覧数: 1314 回

アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

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

#2

投稿記事 by YYSS » 9年前

環境を書き忘れてました;;

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

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

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

#3

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

試してませんが、こう言うことではないでしょうか?
Enemy[num].Y = CEN_Y + sin( Angle * (PI / 180) ) *R + R;
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2648
登録日時: 10年前
連絡を取る:

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

#4

投稿記事 by ISLe » 9年前

変更を最小限にするならこんなところでしょうか。

コード:

	//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;
	}

アバター
Tatu
記事: 445
登録日時: 9年前
住所: 北海道

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

#5

投稿記事 by Tatu » 9年前

敵がある形を組んで飛んできた時、その形が全く変わらないようにしたいのでしょうか?
それなら、回転移動の部分を

コード:

	//回転
	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) )であるとし、
その差が移動量であると考えたものです。

アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

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

#6

投稿記事 by YYSS » 9年前

回答ありがとうございます。

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

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


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

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

閉鎖

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