サンプルプログラム アニメーション

アニメーション

 キャラクターモデルをアニメーションさせたいときは、MV1AttachAnimMV1SetAttachAnimTime を使用します。
 DXライブラリにはアニメーションの再生時間を自動で進める仕組みが無いので、MV1SetAttachAnimTime の
引数で指定する再生時間を少しづつ進めることでアニメーションを実現します。

 アニメーションをループする場合は、アニメーションの再生時間が MV1GetAttachAnimTotalTime で取得できる
アニメーションの総時間を超えたらアニメーション時間を最初に戻します。

 ( プログラムの実行に必要なファイルはこちら )


// 走るアニメーションのループ再生

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	int    ModelHandle ;
	float  AnimTotalTime ;
	float  AnimNowTime ;
	int    AnimAttachIndex ;

	// ウインドウモードで起動
	ChangeWindowMode( TRUE ) ;

	// DXライブラリの初期化
	if( DxLib_Init() < 0 ) return -1 ;

	// 3Dモデルの読み込み
	ModelHandle = MV1LoadModel( "DxChara.x" ) ;

	// 走りアニメーションをアタッチ
	AnimAttachIndex = MV1AttachAnim( ModelHandle, 1 ) ;

	// 走りアニメーションの総時間を取得しておく
	AnimTotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AnimAttachIndex ) ;

	// アニメーション再生時間を初期化
	AnimNowTime = 0.0f ;
	MV1SetAttachAnimTime( ModelHandle, AnimAttachIndex, AnimNowTime ) ;

	// 描画先を裏画面にする
	SetDrawScreen( DX_SCREEN_BACK ) ;

	// カメラの位置と向きを設定
	SetCameraPositionAndTarget_UpVecY( VGet( 1340.0f, 600.0f, -420.0f ), VGet( 0.0f, 400.0f, -420.0f ) );

	// カメラのクリッピング距離を設定
	SetCameraNearFar( 16.0f, 3800.0f );

	// 背景の色を灰色にする
	SetBackgroundColor( 128, 128, 128 ) ;

	// メインループ(何かキーが押されたらループを抜ける)
	while( ProcessMessage() == 0 )
	{
		// 画面のクリア
		ClearDrawScreen() ;

		// アニメーション再生時間を進める
		AnimNowTime += 100.0f ;

		// アニメーション再生時間がアニメーションの総時間を越えていたらループさせる
		if( AnimNowTime >= AnimTotalTime )
		{
			// 新しいアニメーション再生時間は、アニメーション再生時間からアニメーション総時間を引いたもの
			AnimNowTime -= AnimTotalTime ;
		}

		// 新しいアニメーション再生時間をセット
		MV1SetAttachAnimTime( ModelHandle, AnimAttachIndex, AnimNowTime ) ;

		// 3Dモデルの描画
		MV1DrawModel( ModelHandle ) ;

		// 裏画面の内容を表画面に反映
		ScreenFlip() ;
	}

	// DXライブラリの後始末
	DxLib_End() ;

	// ソフトの終了
	return 0 ;
}

戻る