魔方陣を回しながら、ボスの周りを回す方法

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

魔方陣を回しながら、ボスの周りを回す方法

#1

投稿記事 by 素人 » 16年前

再び魔方陣について救いの手を貸してください><
タイトルどおりなんですが、ボスの中心軸と魔方陣の中心軸を二つ一緒に作る方法が分からなくて困ってます。
DrawRotaGraphFdF(boss.dx,   boss.dy,//←ここが分からない
	(0.085+0.02*sin(PI2/120*(-count%120)))*3,
	2*PI*(count%100)/100,//時計まわり
	img_etc[5], TRUE);
どうしたら軸を二つ作り、魔方陣を回しながらボスの周りを回すことが出来るのでしょうか?

DVDM

Re:魔方陣を回しながら、ボスの周りを回る方法

#2

投稿記事 by DVDM » 16年前

>>素人さん
DxLib知らないので的外れかもしれませんが、
DrawRotaGraphで検索をかけると「メモリに読みこんだグラフィックの回転描画」という関数みたいですので
ボスの周りをぐるぐる回る処理と画像の回転処理を分ければ実装できそうな感じがします。

余力がありましたら、引数で渡した対象を中心にぐるぐる回る処理を作っておくと後々便利かもしれません。
#define PI	3.14159265f
#define RAD(Angle)	((Angle)*PI/180.0f)[color=339933]// RAD(角度)と記述することで、ラジアンに変換する[/color]
[color=339933]// 回転処理[/color]
魔法陣のX座標 = ボスのX座標 + ボスから魔法陣までの距離 * cosf(RAD(角度));
魔法陣のY座標 = ボスのY座標 + ボスから魔法陣までの距離 * sinf(RAD(角度));
角度 += 角度変化分;
魔法陣の画像を回転させる処理

ボスから魔法陣までの距離をX、Y共に同じにすると綺麗な円を描き、違う値を指定すると楕円を描きます。
角度変化分の値を弄ると、高速でぐるぐる回したり、ゆっくりと回したりできると思います。
また、角度 -= 角度変化分; とすることで逆回転にすることもできます。

素人

Re:魔方陣を回しながら、ボスの周りを回る方法

#3

投稿記事 by 素人 » 16年前

返答ありがとうございます。
ちょっと分からない点があったのですが
魔法陣のX座標と魔法陣のY座標とは
例えば、
DrawRotaGraphFdF(boss.dx-140,   boss.dy-58,
	(0.085+0.02*sin(PI2/120*(-count%120)))*3,
	2*PI*(count%100)/100,//時計まわり
	img_etc[5], TRUE);
としたらboss.dx-140、boss.dy-58のことを表してるのでしょうか?
それとも新しく座標を作る必要があるのでしょうか?
また「角度」 += 角度変化分;
の「角度」とは具体的に何の角度のことを表してるのでしょうか?

DVDM

Re:魔方陣を回しながら、ボスの周りを回る方法

#4

投稿記事 by DVDM » 16年前

>>素人さん
DrawRotaGraphFdF関数は画像自体の回転という認識で間違いないでしょうか。
凄く不安なのですが、DrawRotaGraph関数の親戚だという前提でお話します。
DrawRotaGraph:http://homepage2.nifty.com/natupaji/DxL ... html#R3N10

第一引数、第二引数に回転させる画像の中心座標を指定します。
上ですと、boss.dx-140, boss.dy-58の位置をベースに画像が右回転(時計回り)するということになります。
ここは画像を回転させなければならない魔法陣の座標を指定しなくてはなりません。
ですので、
[color=gray>
>魔法陣のX座標と魔法陣のY座標とは~
>~boss.dx-140、boss.dy-58のことを表してるのでしょうか?[/color]
回転させる画像の中心座標とリファレンスに書いていましたので
(boss.dx や boss.dy が何を表しているかは解りませんが)そういう事になります。

[color=gray>
>それとも新しく座標を作る必要があるのでしょうか?[/color]
DrawRotaGraphFdF関数の引数だけで画像を回転させ、
なお且つボスの周りを円運動出来るのでしたら必要ありません。
・・・が、作らないと出来ないような気がします。
[color=gray>
>また「角度」 += 角度変化分;
>の「角度」とは具体的に何の角度のことを表してるのでしょうか?[/color]
「ボスを中心に円運動させるための角度」です。

素人

Re:魔方陣を回しながら、ボスの周りを回る方法

#5

投稿記事 by 素人 » 16年前

あてはめてみたのですが
(1行目)#define RAD(Angle)	((Angle)*PI/180.0f)
(2行目)boss.dx-140=boss.dx+50*cosf(RAD(90));
(3行目)boss.dy-58=boss.dy+50*sinf(RAD(90));
(4行目)RAD(Angle)+=1;
(5行目)	DrawRotaGraph(boss.dx-140,   boss.dy-58,//ボス左上
(6行目)				   (0.085+0.02*sin(PI2/120*(-count%120)))*3,
(7行目)				   2*PI*(count%100)/100,//時計まわり
(8行目)				   img_etc[5], TRUE);
エラーが出ます。
(1行目)warning C4305: '引数' : 'double' から 'float' へ切り詰めます。
(1行目)error C2106: '=' : 左のオペランドが、左辺値になっていません。
(2行目)warning C4305: '引数' : 'double' から 'float' へ切り詰めます。
(2行目)error C2106: '=' : 左のオペランドが、左辺値になっていません。
(3行目)error C2106: '+=' : 左のオペランドが、左辺値になっていません。
(4行目)error C2065: 'Angle' : 定義されていない識別子です。
(8行目)warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
(8行目)warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。

なにが原因でどうすればおっしゃる通りになるのか指摘お願いします。

ねこ

Re:魔方陣を回しながら、ボスの周りを回る方法

#6

投稿記事 by ねこ » 16年前

左辺に式は入れられません。
boss.dx=boss.dx+50*cosf(RAD(90))+140;
boss.dy=boss.dy+50*sinf(RAD(90))+58;
Angle+=RAD(1);

pooka

Re:魔方陣を回しながら、ボスの周りを回る方法

#7

投稿記事 by pooka » 16年前

まとめるとこんな感じでしょうか?
void DrawTest(double cx,double cy,double r,double ExtRate,double Angle1,double Angle2,int GrHandle,int TransFlag,int TurnFlag = 0){
    double x,y;
    x = r * cos(Angle1) + cx;
    y = r * sin(Angle1) + cy;

    DrawRotaGraphF((float)x,(float)y,ExtRate,Angle2,GrHandle,TransFlag,TurnFlag);
}

cx,cy:中心座標(ボスの座標)
r:中心座標との距離(ボスとの距離)
ExtRate:拡大率
Angle1:描画角度(素人さんが添付した画像の黄色いほう)
Angle2:描画角度(素人さんが添付した画像の赤いほう)
GrHandle:描画するグラフィックの識別番号(グラフィックハンドル)
TransFlag:透過色が有効か、フラグ(TRUEで有効FALSEで無効)
TurnFlag:画像の左右反転を行うか、のフラグ(FALSEで普通に描画 TRUEで反転)

名前などは適当に変更してください。

素人

Re:魔方陣を回しながら、ボスの周りを回る方法

#8

投稿記事 by 素人 » 16年前

アドバイスのおかげで無事出来ました!
DVDMさん、ねこさん、pookaさん
ありがとうございました!

閉鎖

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