DX9动画控制

SmoothChangeAnimation函数申明:

void SmoothChangeAnimation(LPD3DXANIMATIONCONTROLLER pAnimController,LPD3DXANIMATIONSET pAnimSet,FLOAT fCurrTime);

SmoothChangeAnimation函数实现:

复制代码
void SmoothChangeAnimation( LPD3DXANIMATIONCONTROLLER pAnimController, LPD3DXANIMATIONSET pAnimSet, FLOAT fCurrTime )
{
    static DWORD dwOldTrack = 0;
    static DWORD dwNewTrack = 1;

    dwNewTrack  = dwOldTrack == 0 ? 1 : 0;
    pAnimController->SetTrackAnimationSet( dwNewTrack, pAnimSet );

    pAnimController->UnkeyAllTrackEvents( dwOldTrack );
    pAnimController->UnkeyAllTrackEvents( dwNewTrack );

    pAnimController->KeyTrackEnable( dwOldTrack, FALSE, fCurrTime + 0.125f );
    pAnimController->KeyTrackSpeed(  dwOldTrack, 0.0f,  fCurrTime, 0.125f, D3DXTRANSITION_LINEAR );
    pAnimController->KeyTrackWeight( dwOldTrack, 0.0f,  fCurrTime, 0.125f, D3DXTRANSITION_LINEAR );

    pAnimController->SetTrackEnable( dwNewTrack, TRUE );
    pAnimController->KeyTrackSpeed(  dwNewTrack, 1.0f,  fCurrTime, 0.125f, D3DXTRANSITION_LINEAR );
    pAnimController->KeyTrackWeight( dwNewTrack, 1.0f,  fCurrTime, 0.125f, D3DXTRANSITION_LINEAR );

    dwOldTrack = dwNewTrack;
}
复制代码

控制动作

复制代码
static float fCurrTime=0.0f;
    fCurrTime += timeDelta;

    LPD3DXANIMATIONSET pAnimationSet=NULL;

    if(::GetAsyncKeyState(0x31)&0x8000f)

    {
    g_pAnimController->GetAnimationSetByName("stand",&pAnimationSet);
    SmoothChangeAnimation(g_pAnimController,pAnimationSet,fCurrTime);
    }
    if(::GetAsyncKeyState(0x32)&0x8000f)

    {
    g_pAnimController->GetAnimationSetByName("sworddance",&pAnimationSet);
    SmoothChangeAnimation(g_pAnimController,pAnimationSet,fCurrTime);
    }
    SAFE_RELEASE(pAnimationSet);


    Device->SetTransform(D3DTS_WORLD, &matFinal);

    g_pAnimController->AdvanceTime(timeDelta,NULL);
    UpdateFrameMatrices(g_pFrameRoot, &matFinal);
复制代码

 

posted @   szmtjs10  阅读(185)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示