いろいろな角度でボールを射出したいのですが・・・
Posted: 2010年9月21日(火) 18:23
皆さん初めましてC-TA-Kと申します
環境はwindows vista 32bit
visual C++ 2008
DxLibraryを使用しています。
本題に入りますが今回私はボールを速度は一定のまま様々な角度で移動させたいと思い、
次のようなプログラムを書きました。
#include "DxLib.h"
#include "Math.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
char Key[256];
int blue = GetColor( 0, 0, 255 );
int bal_speed = 1; //ボールのスピード
int bal_r = 8; //ボールの半径
double bal_x = 320; //ボールの初期x座標
double bal_y = 240; //ボールの初期y座標
double bal_ang = 190; //ボールの角度(度) ここの角度を自由に変えてください
double bal_rad = bal_ang * 3.14159 / 180; //ボールの角度(ラジアン)
while(ProcessMessage() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll( Key ) == 0 && Key[KEY_INPUT_ESCAPE] == 0)
{
bal_x += cos( bal_rad ) * bal_speed;
bal_y += sin( bal_rad ) * bal_speed;
DrawCircle( (int)bal_x, (int)bal_y, bal_r, blue, FALSE );
ScreenFlip();
}
DxLib_End();
return 0;
}
ですがこれだとボールがやたらとガクガクしてしまいます。おそらくはdouble型によって計算された値を
描画時に切り捨ててしまっていることが関係していることは分かるのですが、これに対する対策がいまいち思いつきません。
思い切って描画前に四捨五入などもしたのですが、そうすると細かい角度調整(5度ずらす等)ができなくなってしまい、あまり好ましくない結果となってしまいました。どうか皆様のご助力をいただけないでしょうか。
環境はwindows vista 32bit
visual C++ 2008
DxLibraryを使用しています。
本題に入りますが今回私はボールを速度は一定のまま様々な角度で移動させたいと思い、
次のようなプログラムを書きました。
#include "DxLib.h"
#include "Math.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
char Key[256];
int blue = GetColor( 0, 0, 255 );
int bal_speed = 1; //ボールのスピード
int bal_r = 8; //ボールの半径
double bal_x = 320; //ボールの初期x座標
double bal_y = 240; //ボールの初期y座標
double bal_ang = 190; //ボールの角度(度) ここの角度を自由に変えてください
double bal_rad = bal_ang * 3.14159 / 180; //ボールの角度(ラジアン)
while(ProcessMessage() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll( Key ) == 0 && Key[KEY_INPUT_ESCAPE] == 0)
{
bal_x += cos( bal_rad ) * bal_speed;
bal_y += sin( bal_rad ) * bal_speed;
DrawCircle( (int)bal_x, (int)bal_y, bal_r, blue, FALSE );
ScreenFlip();
}
DxLib_End();
return 0;
}
ですがこれだとボールがやたらとガクガクしてしまいます。おそらくはdouble型によって計算された値を
描画時に切り捨ててしまっていることが関係していることは分かるのですが、これに対する対策がいまいち思いつきません。
思い切って描画前に四捨五入などもしたのですが、そうすると細かい角度調整(5度ずらす等)ができなくなってしまい、あまり好ましくない結果となってしまいました。どうか皆様のご助力をいただけないでしょうか。