使用されている関数( atan2, cos, sin )は合っていますが、
掛けたり足したりする要素やプラス・マイナスの符号に誤りがある気がします
敵がプレイヤーを延々とホーミングするプログラムを作成してみましたので、
よろしければご覧ください
#include "DxLib.h"
#include <math.h>
#define ENEMY_SPEED 3.0f
#define PLAYER_SPEED 6.0f
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
double angle ;
float EnemyX = 320.0f, EnemyY = 16.0f ;
float PlayerX = 200.0f, PlayerY = 460.0f ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ(何かキーが押されたらループを抜ける)
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// ホーミングの処理
angle = atan2( ( double )( PlayerY - EnemyY ), ( double )( PlayerX - EnemyX ) ) ;
EnemyX += ( float )( cos( angle ) * 3.0 ) ;
EnemyY += ( float )( sin( angle ) * 3.0 ) ;
// プレイヤーの移動処理
int pad = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
if( pad & PAD_INPUT_LEFT ) PlayerX -= 6.0f ;
if( pad & PAD_INPUT_RIGHT ) PlayerX += 6.0f ;
if( pad & PAD_INPUT_UP ) PlayerY -= 6.0f ;
if( pad & PAD_INPUT_DOWN ) PlayerY += 6.0f ;
// 敵の描画
DrawBox(
( int )EnemyX - 8 , ( int )EnemyY - 8 ,
( int )EnemyX + 8 , ( int )EnemyY + 8 ,
GetColor( 255, 0, 0 ), TRUE
) ;
// プレイヤーの描画
DrawBox(
( int )PlayerX - 16, ( int )PlayerY - 16,
( int )PlayerX + 16, ( int )PlayerY + 16,
GetColor( 255,255,255 ), TRUE
) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}