マウスを動かすと注視点?が動くようにしたんですが
動くときにすごくがくがくするというか、コマ送りみたいな感じになってしまいます。
なめらかに動くようにしたいのですが、どうしたらいいでしょうか?
-- main.cpp --
#include "DxLib.h"
#include "move.h"
#include "camera.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE );
SetDrawScreen( DX_SCREEN_BACK );
if( DxLib_Init() == -1 )
{
return -1;
}
//3Dモデルのハンドルを入手
int RedBoxHandle = MV1LoadModel( "box-red.mqo" );
int YellowBoxHandle = MV1LoadModel( "box-yellow.mqo" );
//3Dモデルの座標を設定
VECTOR RedBoxPosition = VGet( 320.0f , -300.0f , 600.0f );
VECTOR YellowBoxPosition = VGet( 450.0f , -300.0f , 600.0f );
//主人公の視点の初期位置を設定
VECTOR PlayerPosition = VGet( 0.0f , 0.0f , 0.0f );
//主人公の注視点の初期位置を設定
CAMERA PlayerCamera = { 0.0f , 0.0f , 0.0f };
while( CheckHitKey(KEY_INPUT_ESCAPE) == 0 )
{
if( ProcessMessage() == -1 ) break;
//画面をクリア
ClearDrawScreen();
//移動制御関数の呼び出し
Move( &PlayerPosition );
//カメラ制御関数の呼び出し
int Count = 0;
while( Count != 40 )
{
Camera( &PlayerCamera );
Count ++ ;
}
//カメラをセット
SetCamera( &PlayerPosition , &PlayerCamera );
//ポリゴンモデルの位置を設定
MV1SetPosition( RedBoxHandle , RedBoxPosition );
MV1SetPosition( YellowBoxHandle , YellowBoxPosition );
//ポリゴンモデルを描画
MV1DrawModel( RedBoxHandle );
MV1DrawModel( YellowBoxHandle );
//裏画面を表画面へ
ScreenFlip();
//マウスを常に中央へ
SetMousePoint( 320 , 240 );
}
DxLib_End();
return(0) ;
}#include "DxLib.h"
#include <stdlib.h>
#include <math.h>
#define DEF_CAMERA_ADD 60.0f
//カメラ情報構造体
typedef struct CAMERA
{
float VRotate; //上下方向の回転角度
float HRotate; //左右方向の回転角度
float TRotate; //捻りの回転角度(未使用)
}CAMERA;
//プロトタイプ宣言
void Camera( CAMERA* Camera); //カメラの総合制御関数
void MoveCamera_Right( CAMERA* Camera ); //注視点を右へ
void MoveCamera_Left( CAMERA* Camera ); //注視点を左へ
void MoveCamera_Up( CAMERA* Camera ); //注視点を上へ
void MoveCamera_Down( CAMERA* Camera ); //注視点を下へ
void SetCamera( VECTOR* Position , CAMERA* Camera ); //カメラを設置
//関数群
void Camera( CAMERA* Camera )
{
int MousePosition_x;
int MousePosition_y;
int x;
int y;
SetMouseDispFlag( FALSE );
GetMousePoint( &MousePosition_x , &MousePosition_y );
x = MousePosition_x - 320;
y = MousePosition_y - 240;
if( x > 0 )
{
MoveCamera_Right( Camera );
}
if( x < 0 )
{
MoveCamera_Left( Camera );
}
if( y > 0 )
{
MoveCamera_Down( Camera );
}
if( y < 0 )
{
MoveCamera_Up( Camera );
}
return ;
}
void MoveCamera_Right( CAMERA* Camera )
{
Camera->HRotate += PHI_F / DEF_CAMERA_ADD;
return ;
}
void MoveCamera_Left( CAMERA* Camera )
{
Camera->HRotate -= PHI_F / DEF_CAMERA_ADD;
return ;
}
void MoveCamera_Up( CAMERA* Camera )
{
Camera->VRotate -= PHI_F / DEF_CAMERA_ADD;
return ;
}
void MoveCamera_Down( CAMERA* Camera )
{
Camera->VRotate += PHI_F / DEF_CAMERA_ADD;
return ;
}
void SetCamera( VECTOR* Position , CAMERA* Camera )
{
SetCameraPositionAndAngle( *Position, Camera->VRotate, Camera->HRotate, Camera->TRotate ) ;
return ;
}#include "DxLib.h"
#include <math.h>
void Move_w(VECTOR* Tmp);
void Move_s(VECTOR* Tmp);
void Move_a(VECTOR* Tmp);
void Move_d(VECTOR* Tmp);
void Move( VECTOR* Position );
void Move_w(VECTOR* Tmp)
{
Tmp->z += 60.0f;
return ;
}
void Move_s(VECTOR* Tmp)
{
Tmp->z -= 60.0f;
return ;
}
void Move_a(VECTOR* Tmp)
{
Tmp->x -= 60.0f;
return ;
}
void Move_d(VECTOR* Tmp)
{
Tmp->x += 60.0f;
return ;
}
void Move( VECTOR* Position )
{
if( CheckHitKey(KEY_INPUT_W) == 1 )
{
Move_w(Position);
}
if( CheckHitKey(KEY_INPUT_S) == 1 )
{
Move_s(Position);
}
if( CheckHitKey(KEY_INPUT_A) == 1 )
{
Move_a(Position);
}
if( CheckHitKey(KEY_INPUT_D) == 1 )
{
Move_d(Position);
}
return ;
}