ゲームプログラミングの館を参考に、ブロック崩しのゲームを作ろうと思ったのですが
三角関数を使って同じスピードで進む玉の角度を変えようと、
(xv:x座標の速さ yv:y座標の速さ ch.x:玉のx座標 ch.y:玉のy座標 sp:玉のスピード ang:角度)
xv=cos(ang*3.14/180)*speed;
yv=sin(ang*3.14/180)*speed;
ch.x+=xv;
ch.y+=yv;
(ch.x,ch.y)で画像を表示
のようにやってみたら、画像の表示の座標がintであることに気づき行き詰りました。
どうやったらスピードを変えずに角度を変えて進ませる事が出来るのでしょうか?
進むスピードを変えずに角度を変える
Re:進むスピードを変えずに角度を変える
表示する座標はintでも、計算はdoubleでやればいいのではないでしょうか?
例えば
1.0
1.3
1.6
1.9
2.2
2.5
2.8
3.1
と、0.3ずつ増えるとしてもdoubleで計算すればきちんと計算出来ますし、
(int)にキャストすればint型の座標にも渡せます。
(しなくても出来ます。警告は出ますが)
また、非公開関数で
DrawGraphF
DrawRotaGraphF
というものがあります。
この関数にはfloat型で座標が渡せます。
小数点座標を受け付けてくれるので、
y=10x
のような傾きで進む物体は綺麗に描画出来ます。
関数の仕様は最初の2引数がintからfloatに変わっただけです。
(龍神録プログラミングの館でもこの関数を使っています)
例えば
1.0
1.3
1.6
1.9
2.2
2.5
2.8
3.1
と、0.3ずつ増えるとしてもdoubleで計算すればきちんと計算出来ますし、
(int)にキャストすればint型の座標にも渡せます。
(しなくても出来ます。警告は出ますが)
また、非公開関数で
DrawGraphF
DrawRotaGraphF
というものがあります。
この関数にはfloat型で座標が渡せます。
小数点座標を受け付けてくれるので、
y=10x
のような傾きで進む物体は綺麗に描画出来ます。
関数の仕様は最初の2引数がintからfloatに変わっただけです。
(龍神録プログラミングの館でもこの関数を使っています)
Re:進むスピードを変えずに角度を変える
後、3.14は最初にきちんとした値を定義しておいた方が良いと思います。
何処のサイトでも見かける方法で
#define PI 3.141592653589793
としておいて、円周率はプログラム中ではPIとして使用するとよいかと。
詳しい円周率はこんなサイトに書いてあります
http://www.kisaragiweb.jp/pi/pi1m.htm
必要ありませんが・・。
何処のサイトでも見かける方法で
#define PI 3.141592653589793
としておいて、円周率はプログラム中ではPIとして使用するとよいかと。
詳しい円周率はこんなサイトに書いてあります
http://www.kisaragiweb.jp/pi/pi1m.htm
必要ありませんが・・。
Re:進むスピードを変えずに角度を変える
座標のほうは管理人さんがおっしゃったとおりです。
角度の 3.14 の部分ですが、精度がいい M_PI マクロ(math.h で定義されている)を使うといいです。
VC++ の場合、そのままだと定義されないらしいので、
角度の 3.14 の部分ですが、精度がいい M_PI マクロ(math.h で定義されている)を使うといいです。
VC++ の場合、そのままだと定義されないらしいので、
// インクルード部 #define _USE_MATH_DEFINES // math.h のマクロ定義を使用する #include <math.h>とすることで M_PI マクロが使用可能になるはずです。
Re:進むスピードを変えずに角度を変える
回答がダブりましたね。
どちらでもいいと思いますが、
math.h の定義では、
どちらでもいいと思いますが、
math.h の定義では、
#define M_PI 3.14159265358979323846となっています。
Re:進むスピードを変えずに角度を変える
こんな早くに回答ありがとうございました。
自分にはまだ早いと思い龍神録プログラミングの館の方を見てなかったので
DrawGraphFの方は知りませんでした。
M_PIの方も初めて知りました、これで作業が進みます、ありがとうございました。
自分にはまだ早いと思い龍神録プログラミングの館の方を見てなかったので
DrawGraphFの方は知りませんでした。
M_PIの方も初めて知りました、これで作業が進みます、ありがとうございました。