細長い弾の進行方向と合わせた弾の回転

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

細長い弾の進行方向と合わせた弾の回転

#1

投稿記事 by 鷹見 » 17年前

こんばんは。こちらでいろいろ学ばせていただき、
今は、シューティングゲーム作っているのですが、
わからないことがあります。

___ 細長い方を頭として、細長い弾を進行方向に合わせ、
    回転させたいのですが、どのような計算でできますか?

どなたか知恵を貸してくください、よろしくお願いします。

管理人

Re:細長い弾の進行方向と合わせた弾の回転

#2

投稿記事 by 管理人 » 17年前

どのようなものかイメージがわかないです。今のところ細い方を頭にして進行方向にあわせて回転するというとイメージとして図のように3Dの回転のようなイメージしかわきませんが3Dなのでしょうか?

ペイントで書いた簡単なものでいいので、絵を添えてもらえると解り易いと思います。

鷹見

Re:細長い弾の進行方向と合わせた弾の回転

#3

投稿記事 by 鷹見 » 17年前

おはようございます、
ペイントで描いてみたのですが間違って変な所に配置してしまいました、ごめんなさい。

今作っているのは2Dのシューティングです。
管理人さんの作ったゲームの竜神録で例えますと、
1面では、中くらいの敵(敵の大きさ)が3発ずつ弾を発射しています。
小さい敵とは弾の形が違い細長いです、そのまま普通に表示すると、X軸に+4方向に進むときも
画像は縦のまま進んでいきます。

この細長い弾を弾の進行方向に合わせて回転させるにはどのような計算で出せるのか?
DXライブラリではこの関数で回転させるみたいですが、DrawRotaGraph 
第四引数に計算式をあてはめるのだと思います。

説明が足りず混乱させてしまい申し訳ないです、この説明でわかっていただけたらと思います。
皆様、よろしくお願いします

名無しさん

Re:細長い弾の進行方向と合わせた弾の回転

#4

投稿記事 by 名無しさん » 17年前

2Dならば、頭を右向きにした画像を用意しておいて
角度=atan2(現在のy座標-1フレーム前のy座標,現在のx座標-1フレーム前のx座標);
で出した角度をDrawRotaGraphに与えてやればいいだけかと思います。

管理人

Re:細長い弾の進行方向と合わせた弾の回転

#5

投稿記事 by 管理人 » 17年前

http://dixq.net/s/31.html
このような動きでいいのでしょうか?

弾の軌跡を回転させるのではなく、弾の進行方向に向けて画像を回転させて表示させたいという事ですね?
進行方向という概念があるのなら、それを引数に渡せばいいだけです。

1、一応軌跡を回転させるには
π=PIとした時まず1回転は2*PIであらわせるのはいいでしょうか?
#define PI2 (3.1415926*2)
とでも定義しておいて、
PI2/360
これが1度に相当します。
今弾の角度が
angle=0
だとして、1度ずつ回転させるには
angle+=PI2/360;
です。これで時計回りになります。マイナスにすれば時計の反対周りです。

2、画像を回転させるには
その先ほどの進行方向angleを引数に渡せばいいだけですです。


typedef struct{
    double x,y,angle,speed;
}bullet_t;

bullet_t bullet;

bullet.x=200;
bullet.y=200;
bullet.angle=PI2/4;
bullet.speed=2.0;

/***弾の軌跡計算部***/

bullet.x+=cos(bullet.angle)*bullet.speed;
bullet.y+=sin(bullet.angle)*bullet.speed;

/*****/

/***表示部***/

DrawRotaGraph(bullet.x,bullet.y,1.0,bullet.angle,画像,TRUE);

/*****/

これで弾は真下へと進み、弾の画像も増したに向きます。
このangleを変化させてやればそっちに進行し、画像もそっちに向きます。
 

鷹見

Re:細長い弾の進行方向と合わせた弾の回転

#6

投稿記事 by 鷹見 » 17年前

おはようございます。
返事が遅くなりました、お二人の提案された2つ方法を実際に実行した結果、

名無しさんの方法は。
綺麗に球の向きが進行方向を向いてくれました、弾の画像を横にするのは予め、
angle - PI/2で修正しました。

管理人さんの方法は。
なぜか弾の向きは、変化があるのとないのがありました、
私の方でなにか間違っている可能性が高いと思います。
基本的にはシューティングゲームの館の方式で書いていますが、Atan2で求めた数値を弾のAngleにいれたのを、
DrawRotaGraphの第4引数に入れる、ということですよね。

ラジアンや角度はまだ使い方が難しいです、
お二人の協力感謝します、ありがとうございました。

閉鎖

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