キャラクターモデルをアニメーションさせたいときは、MV1AttachAnim と MV1SetAttachAnimTime を使用します。
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 ;
}
戻る