登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

聊天机器

Chatbot's private blog

 
 
 

日志

 
 

sprite使用  

2008-10-17 23:13:29|  分类: 程序理论 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前面提过了使用D3DXSprite创建带alpha通道的2D图像,这里介绍一下动画的实现方式:

1、帧动画

首先需要多帧的动画图片,如下图:

sprite使用 - 启 - 聊天机器

我们通过设置角色纹理图片的选取矩形,就可以获得我们需要的特定帧,这里先设置为第一行第一列的图片帧:

SetRect( &rctNpc, 0,0, 132, 128 );

在绘制该纹理时根据流逝时间来确定显示的帧位置:

switch(((int)(timeGetTime()/100))%4)

{

case 0:

    SetRect( &rctNpc, 132*0,0, 132*1, 128 );

    break;

case 1:

    SetRect( &rctNpc, 132*1,0, 132*2, 128 );

    break;

case 2:

    SetRect( &rctNpc, 132*2,0, 132*3, 128 );

    break;

case 3:

    SetRect( &rctNpc, 132*3,0, 132*4, 128 );

    break;

}

绘制时使用该矩形即可。

2 变换动画

有时候我们需要对图像进行一些位移、旋转或缩放的变换,这里我们使用一个生成2D变换矩阵的函数来确定我们需要的变换:

g_pSprite->SetTransform(D3DXMatrixAffineTransformation2D(

    &mat,   //输出的矩阵,同时也作为函数返回值

    0.8,     //缩放因子

    &D3DXVECTOR2(0.0f,0.0f),  //旋转圆心以纹理的圆心原点为圆心

    t/500,                                  //旋转角度随时间变化

    &D3DXVECTOR2(100.0f, 100.0f)     //位移x 100,y 100

    )

);

3 淡入淡出

实质上就是透明度的变化,我们只需要设置角色纹理图显示时的alpha值得变化即可。

首先必须在初始化设备的时候设置好有关alpha的渲染状态:

g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);                //打开alpha混合

g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);        //设置alpha混合方式

g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_ADD);        //设置alpha操作方式为加

然后在绘制的前设置alpha混合标志:

g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

最后在绘制的时候调节Draw函数最后一个参数的alpha部分的数值,如下代码:

g_pSprite->Draw(g_pNpcTexture, &rctNpc, &D3DXVECTOR3(66.0f,64.0f,0.0f), NULL, D3DXCOLOR(1.0f,1.0f,1.0f,(sin(t/500)+1)/2));

注意:这里的&rctNpc是选取的纹理矩形,D3DXVECTOR3(66.0f,64.0f,0.0f)是纹理的中心、D3DXCOLOR(1.0f,1.0f,1.0f,(sin(t/500)+1)/2)是alpha值随时间变化而变化的颜色。

这时候我们就能得到一个不停自传、不断淡入淡出的、走动着的和尚的动画。

  评论这张
 
阅读(150)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018