#include "DxLib.h"
#include <Math.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
int Rc=0,Jump=0,Jc=0;//Rcループカウンター,Jumpジャンプフラッグ,Jcジャンプカウンター
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
float MYX=320,MYY=240,MYZ=0;
float Range, Atten0, Atten1, Atten2 ;
int KabeModel=MV1LoadModel( "Kabe.mqo" ) ;
int GrHandle=LoadGraph("KabeTex.bmp");
int FrameNo=0;
int i;
int j;
Range = 2000.0f ;
Atten0 = 0.0f ;
Atten1 = 0.0006f ;
Atten2 = 0.0f ;
int MouseX=0,MouseY=0;
int KakudoX=0;
int KakudoY=0;
// ライトのアンビエントカラーを赤色に変更
SetLightAmbColor( GetColorF( 0.4f, 0.0f, 0.0f, 0.0f ) ) ;
MATERIALPARAM MatParam ;
MatParam.Diffuse = GetColorF( 1.0f, 1.0f, 1.0f, 1.0f ) ; // ディフューズカラーは白
MatParam.Ambient = GetColorF( 1.0f, 1.0f, 1.0f, 1.0f ) ; // アンビエントカラーは白( ライトのアンビエントカラーをそのまま反映する )
MatParam.Specular = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ; // スペキュラカラーは無し
MatParam.Emissive = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ; // エミッシブカラー( 自己発光 )もなし
MatParam.Power = 0.0f ; // スペキュラはないので0
// マテリアルのパラメータをセット
SetMaterialParam( MatParam ) ;
ChangeLightTypePoint(
VGet( 320.0f, 1000.0f, 200.0f ),
Range,
Atten0,
Atten1,
Atten2 ) ;
float CameraX,CameraY,CameraZ;
// カメラの座標を初期化
CameraX = 0.0f ;
CameraY = 0.0f ;
CameraZ = -800.0f ;
int CameraPos;
while(1){
if(CheckHitKey(KEY_INPUT_LEFT)==1)MYX-=8;
if(CheckHitKey(KEY_INPUT_RIGHT)==1)MYX+=8;
if(CheckHitKey(KEY_INPUT_UP)==1)MYZ+=8;
if(CheckHitKey(KEY_INPUT_DOWN)==1)MYZ-=8;
if(CheckHitKey(KEY_INPUT_SPACE)==1){
if(Jump==0){Jump++;
Jc=Rc;
}}
if(Jc+20>=Rc){
if(Jump==1){
MYY+=3;}}
else{
if(Jump==1){
Jump++;
}
}
if(Jump==2){
MYY--;
if(MYY<240){
Jump-=2;
}
}
if(MYY>240)MYY--;
// 3D空間上に画像を描画
DrawBillboard3D( VGet( 320.0f, 160.0f, 100.0f ), 0.5f, 0.5f, 120.0f, 0.0f, GrHandle, TRUE ) ;
for(i=0;i<100;i++){
// 3D空間上に円錐を描画
DrawCone3D( VGet( 320.0f, -100.0f,i*800.0f ), VGet( 320.0f, 160.0f, i*800.0f ), 400.0f, 16, GetColor( 0,0,255 ), GetColor( 255,255,255 ), TRUE ) ;
}
//マウスカーソルの初期化
SetMousePoint( 320 , 240 ) ;
//マウスが動いた後の場所
GetMousePoint( &MouseX , &MouseY ) ;
KakudoY=MGetRotY(MouseX-320);
KakudoX=MGetRotZ(MouseY-240);
CameraPos = VAdd(VTransform(VTransform(VGet(200.0f,0.0f,0.0f),KakudoX),KakudoY),VGet(MYX,MYY,MYZ));
//カメラをマウスが動いた数だけ移動させようとしている
SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( MYX, MYY, MYZ ) ) ;
//マウスの値の初期化
MouseX=320;
MouseY=240;
// 3D空間上に球を描画する
DrawSphere3D( VGet( MYX, MYY, MYZ ), 80.0f, 32, GetColor( 10,24,231 ), GetColor( 100, 40, 100 ), TRUE );
// Windows システムからくる情報を処理する
if( ProcessMessage() == -1 ) break ;
// ESCキーが押されたらループから抜ける
if( CheckHitKey( KEY_INPUT_ESCAPE ) == 1 ) break ;
WaitTimer(20);
ClearDrawScreen();
Rc++;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
3Dアクション基本+プレイヤー以外のキャラクター
を見て改良しましたが意味が分からないプログラムになってしまいました
さらにどのように改良すればいいでしょうか?