19,466
社区成员
发帖
与我相关
我的任务
分享
#include"ENobject2D.h"
//2D图rotate/move/scale
//旋转以及对缩放有修正作用
void ENobject2D::LHxxROTATE_2DIMAGE(char *Tname,float angle,int mirrorX,int mirrorY)
{
int i=0;
TList=ENobject2DListOb.GetNode(Tname);
LHxx2DIMAGE *sc=TList->ObjectData;
if(angle>=PI*2)
{
angle=0;
}
sc->LHxxAngle=angle;
float dx,dy,dw,dh;//临时变量
float sw = sc->LHxxIw;//image width
float sh = sc->LHxxIh;//image height
float sclx,scly,sclw,sclh;//复位并放缩的坐标(局部坐标系--image的坐标系)
float hotx =sw/2;//旋转中心
float hoty =sh/2;
//复位 放缩 , 旋转 ,平移
float xscale=sc->LHxxScaleX;
float yscale=sc->LHxxScaleY;
//放缩后的区域
sclx = -hotx;
scly = -hoty;
//原始旋转中心
sclw = (sw - hotx);
sclh = (sh - hoty);
float sint, cost;
sint = sinf(sc->LHxxAngle);
cost = cosf(sc->LHxxAngle);
float TestAngleXDa[4];
float TestAngleYDa[4];
memcpy(TestAngleXDa,sc->LHxxAngleXDa,sizeof(sc->LHxxAngleXDa));
memcpy(TestAngleYDa,sc->LHxxAngleYDa,sizeof(sc->LHxxAngleYDa));
if(mirrorX==1)
{
LHxx2DSCREENVERTEX* ss;
sc->LHxx2DMVertexBuffer->Lock( 0, 0, (void**)&ss, 0 );
//求得4点旋转量 (减去放大值)
TestAngleXDa[0] = sclx*cost - scly*sint -sclx;
TestAngleYDa[0] = sclx*sint + scly*cost -scly;
TestAngleXDa[1] = sclw*cost - scly*sint -sclw;
TestAngleYDa[1] = sclw*sint + scly*cost -scly;
TestAngleXDa[2] = sclx*cost - sclh*sint -sclx;
TestAngleYDa[2] = sclx*sint + sclh*cost -sclh;
TestAngleXDa[3] = sclw*cost - sclh*sint -sclw;
TestAngleYDa[3] = sclw*sint + sclh*cost -sclh;
sc->LHxx2DMVertexBuffer->Unlock();
}
else if(mirrorX==2 )
{
LHxx2DSCREENVERTEX* ss;
sc->LHxx2DMVertexBuffer->Lock( 0, 0, (void**)&ss, 0 );
//求得4点旋转量 (减去放大值)
TestAngleXDa[1] = sclx*cost - scly*sint -sclx;
TestAngleYDa[1] = sclx*sint + scly*cost -scly;
TestAngleXDa[0] = sclw*cost - scly*sint -sclw;
TestAngleYDa[0] = sclw*sint + scly*cost -scly;
TestAngleXDa[3] = sclx*cost - sclh*sint -sclx;
TestAngleYDa[3] = sclx*sint + sclh*cost -sclh;
TestAngleXDa[2] = sclw*cost - sclh*sint -sclw;
TestAngleYDa[2] = sclw*sint + sclh*cost -sclh;
sc->LHxx2DMVertexBuffer->Unlock();
}
if(mirrorX==1 && mirrorY==2)
{
LHxx2DSCREENVERTEX* ss;
sc->LHxx2DMVertexBuffer->Lock( 0, 0, (void**)&ss, 0 );
//求得4点旋转量 (减去放大值)
TestAngleXDa[2] = sclx*cost - scly*sint -sclx;
TestAngleYDa[2] = sclx*sint + scly*cost -scly;
TestAngleXDa[3] = sclw*cost - scly*sint -sclw;
TestAngleYDa[3] = sclw*sint + scly*cost -scly;
TestAngleXDa[0] = sclx*cost - sclh*sint -sclx;
TestAngleYDa[0] = sclx*sint + sclh*cost -sclh;
TestAngleXDa[1] = sclw*cost - sclh*sint -sclw;
TestAngleYDa[1] = sclw*sint + sclh*cost -sclh;
sc->LHxx2DMVertexBuffer->Unlock();
}
else if(mirrorX==2 && mirrorY==2)
{
LHxx2DSCREENVERTEX* ss;
sc->LHxx2DMVertexBuffer->Lock( 0, 0, (void**)&ss, 0 );
//求得4点旋转量 (减去放大值)
TestAngleXDa[3] = sclx*cost - scly*sint -sclx;
TestAngleYDa[3] = sclx*sint + scly*cost -scly;
TestAngleXDa[2] = sclw*cost - scly*sint -sclw;
TestAngleYDa[2] = sclw*sint + scly*cost -scly;
TestAngleXDa[1] = sclx*cost - sclh*sint -sclx;
TestAngleYDa[1] = sclx*sint + sclh*cost -sclh;
TestAngleXDa[0] = sclw*cost - sclh*sint -sclw;
TestAngleYDa[0] = sclw*sint + sclh*cost -sclh;
sc->LHxx2DMVertexBuffer->Unlock();
}
memcpy(sc->LHxxAngleXDa,TestAngleXDa,sizeof(TestAngleXDa));
memcpy(sc->LHxxAngleYDa,TestAngleYDa,sizeof(TestAngleYDa));
}
void ENobject2D::LHxxMOVE_2DIMAGE(char *Tname,float movex,float movey,
int mirrorX,int mirrorY)
{
TList=ENobject2DListOb.GetNode(Tname);
LHxx2DIMAGE *sc=TList->ObjectData;
sc->LHxxIx=movex;
sc->LHxxIy=movey;
float h=sc->LHxxIh;//缩放后的大小
float w=sc->LHxxIw;
//以中心为图片的位置
float x=sc->LHxxIx-sc->LHxxIw/2;
float y=sc->LHxxIy-sc->LHxxIh/2;
if(mirrorX==1)
{
LHxx2DSCREENVERTEX* ss;
sc->LHxx2DMVertexBuffer->Lock( 0, 0, (void**)&ss, 0 );
ss[0].LHxxSx=x +sc->LHxxAngleXDa[0];
// ss[0].LHxxSy=y +LHxxAngleYDa[0];
ss[1].LHxxSx=x+w +sc->LHxxAngleXDa[1];
// ss[1].LHxxSy=y +LHxxAngleYDa[1];
ss[2].LHxxSx=x +sc->LHxxAngleXDa[2];
// ss[2].LHxxSy=y+h +LHxxAngleYDa[2];
ss[3].LHxxSx=x+w+sc->LHxxAngleXDa[3];
// ss[3].LHxxSy=y+h +LHxxAngleYDa[3];
sc->LHxx2DMVertexBuffer->Unlock();
}
else if(mirrorX==2)
{
LHxx2DSCREENVERTEX* ss;
sc->LHxx2DMVertexBuffer->Lock( 0, 0, (void**)&ss, 0 );
ss[0].LHxxSx=x +w +sc->LHxxAngleXDa[0];
// ss[0].LHxxSy=y +LHxxAngleYDa[0];
ss[1].LHxxSx=x +sc->LHxxAngleXDa[1];
// ss[1].LHxxSy=y +LHxxAngleYDa[1];
ss[2].LHxxSx=x +w +sc->LHxxAngleXDa[2];
// ss[2].LHxxSy=y+h +LHxxAngleYDa[2];
ss[3].LHxxSx=x +sc->LHxxAngleXDa[3];
// ss[3].LHxxSy=y+h +LHxxAngleYDa[3];
sc->LHxx2DMVertexBuffer->Unlock();
}
if(mirrorY==1)
{
LHxx2DSCREENVERTEX* ss;
sc->LHxx2DMVertexBuffer->Lock( 0, 0, (void**)&ss, 0 );
// ss[0].LHxxSx=x +LHxxAngleXDa[0];
ss[0].LHxxSy=y +sc->LHxxAngleYDa[0];
// ss[1].LHxxSx=x+w +LHxxAngleXDa[1];
ss[1].LHxxSy=y +sc->LHxxAngleYDa[1];
// ss[2].LHxxSx=x +LHxxAngleXDa[2];
ss[2].LHxxSy=y+h +sc->LHxxAngleYDa[2];
// ss[3].LHxxSx=x+w+LHxxAngleXDa[3];
ss[3].LHxxSy=y+h +sc->LHxxAngleYDa[3];
sc->LHxx2DMVertexBuffer->Unlock();
}
else if(mirrorY==2)
{
LHxx2DSCREENVERTEX* ss;
sc->LHxx2DMVertexBuffer->Lock( 0, 0, (void**)&ss, 0 );
// ss[0].LHxxSx=x +w +LHxxAngleXDa[0];
ss[0].LHxxSy=y +h +sc->LHxxAngleYDa[0];
// ss[1].LHxxSx=x +LHxxAngleXDa[1];
ss[1].LHxxSy=y +h +sc->LHxxAngleYDa[1];
// ss[2].LHxxSx=x +w +LHxxAngleXDa[2];
ss[2].LHxxSy=y +sc->LHxxAngleYDa[2];
// ss[3].LHxxSx=x +LHxxAngleXDa[3];
ss[3].LHxxSy=y +sc->LHxxAngleYDa[3];
sc->LHxx2DMVertexBuffer->Unlock();
}
}
void ENobject2D::LHxxSCALE_2DIMAGE(char *Tname,float scalex,float scaley,
int mirrorX,int mirrorY)
{
TList=ENobject2DListOb.GetNode(Tname);
LHxx2DIMAGE *sc=TList->ObjectData;
//缩小极限为-0.1
if(scalex<=-0.1 || scaley<-0.1)
{
return;
}
//求出缩放差
float sx=sc->LHxxScaleX-scalex;
float sy=sc->LHxxScaleY-scaley;
if(sx<0)//放大
{
sc->LHxxIw=sc->LHxxIw+abs(sc->LHxxRw*sx);
sc->LHxxScaleOffsetX+=abs(sc->LHxxRw*sx);//计得缩放了多大
}
if(sx>0)//缩小
{
sc->LHxxIw=sc->LHxxIw-sc->LHxxRw*sx;
sc->LHxxScaleOffsetX-=abs(sc->LHxxRw*sx);
}
if(sy<0)//放大
{
sc->LHxxIh=sc->LHxxIh+abs(sc->LHxxRh*sy);
sc->LHxxScaleOffsetY+=abs(sc->LHxxRh*sy);
}
if(sy>0)//缩小
{
sc->LHxxIh=sc->LHxxIh-sc->LHxxRh*sy;
sc->LHxxScaleOffsetY-=abs(sc->LHxxRh*sy);
}
//当前缩放倍数
sc->LHxxScaleX=scalex;
sc->LHxxScaleY=scaley;
//将放大的数据过滤
LHxxROTATE_2DIMAGE(Tname,sc->LHxxAngle,mirrorX,mirrorY);
}
VOID ENobject2D::LHxxDRAW_2DIMAGE(char *Tname,void* value,int distance,int veversal)
{
int i=0;
TList=ENobject2DListOb.GetNode(Tname);
LHxx2DIMAGE *ob=TList->ObjectData;
if(ob->LHxxVisible<=0){return;}
LHxxMOVE_2DIMAGE(Tname,ob->LHxxIx,ob->LHxxIy,ob->LHxxMirrorXOff,ob->LHxxMirrorYOff);
//设置数字显示
if(distance!=-8888)
{
char ss[200];
strcpy(ss,(char*)value);
int size=strlen(ss);
int tempx=ob->LHxxIx;
int tempy=ob->LHxxIy;
for(i=0;i<size;i++)
{
ob->LHxx2DATCurFrame=(int)ss[i]-48;//计得ASKII码
if(veversal==0)//正常
{
ob->LHxxIx=tempx+(ob->LHxxIw*i/2+(distance*i));
}
else if(veversal==1)//反转
{
ob->LHxxIx=tempx+(ob->LHxxIw*((size-1)-i)/2+distance*((size-1)-i));
}
ob->LHxxIy=tempy;
LHxxMOVE_2DIMAGE(Tname,ob->LHxxIx,ob->LHxxIy,ob->LHxxMirrorXOff,ob->LHxxMirrorYOff);
ob->LHxxIx=tempx;
ob->LHxxIy=tempy;
this->ENobject::m_pd3dDevice->SetTexture( 0, ob->LHxx2DTexAT[ob->LHxx2DATCurFrame].
LHxxATTexture );
//设置渲染模式flat/gouraud
TENd3dOb->ENrenderStateOb->RenderState_RenderMode(2);
//设置渲染模式(渲染出正常面或者不断渲染出最底的面)(2D镜像要打开这个)
TENd3dOb->ENrenderStateOb->RenderState_CULLMODE(D3DRS_CULLMODE,D3DCULL_NONE);
//2D禁用,不然显示次序相反
//深度测试
//1:激活深度缓冲区;
//2:设置深度缓冲区;
//3:允许深度缓冲区更新
//4:设置深度测试
TENd3dOb->ENrenderStateOb->RenderState_ZFUNCTEST(false);
//辅助功能
//1:使程序允许抖动
TENd3dOb->ENrenderStateOb->RenderState_ASSISTANT(true);
//纹理alpha混合/alpha测试
TENd3dOb->ENrenderStateOb->RenderState_ALPHATEXTRUE(true);
//1:物理RGB混合方式
//2:设置纹理坐标是第几个纹理层(默认纹理坐标)P197
//3:设置纹理坐标输出为几维(2D)P199
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_BasicSet(0,1);
//纹理采样
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_Sampling(0,ob->Texture2DSample,1);
//纹理寻址
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_VisMode(0,ob->Texture2DAddress,ob->Texture2DAddressColor,1);
this->ENobject::m_pd3dDevice->SetStreamSource( 0, ob->LHxx2DMVertexBuffer, 0, sizeof(LHxx2DSCREENVERTEX) );
this->ENobject::m_pd3dDevice->SetFVF( LHxx2DSCREENVERTEXFVF );
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2);
//基本图元:将顶点连结成基本图元
//能够绘制当前的索引数组;P56(多边形用)
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_POINTLIST, 0, 2*3);//顶点集合
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_LINELIST, 0,3*2 );//线段集合
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_LINESTRIP, 0,3*2);//不间断线段集合
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0,2);//三角形集合
this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0,2);//不间断三角形集合
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0,2);//fan集合
}
}
else if(distance==-8888)//正常图片显示
{
this->ENobject::m_pd3dDevice->SetTexture( 0, ob->LHxx2DTexAT[ob->LHxx2DATCurFrame].
LHxxATTexture );
//设置渲染模式flat/gouraud
TENd3dOb->ENrenderStateOb->RenderState_RenderMode(2);
//设置渲染模式(渲染出正常面或者不断渲染出最底的面)(2D镜像要打开这个)
TENd3dOb->ENrenderStateOb->RenderState_CULLMODE(D3DRS_CULLMODE,D3DCULL_NONE);
//2D禁用,不然显示次序相反
//深度测试
//1:激活深度缓冲区;
//2:设置深度缓冲区;
//3:允许深度缓冲区更新
//4:设置深度测试
TENd3dOb->ENrenderStateOb->RenderState_ZFUNCTEST(false);
//辅助功能
//1:使程序允许抖动
TENd3dOb->ENrenderStateOb->RenderState_ASSISTANT(true);
//纹理alpha混合/alpha测试
TENd3dOb->ENrenderStateOb->RenderState_ALPHATEXTRUE(true);
//1:物理RGB混合方式
//2:设置纹理坐标是第几个纹理层(默认纹理坐标)P197
//3:设置纹理坐标输出为几维(2D)P199
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_BasicSet(0,1);
//纹理采样
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_Sampling(0,ob->Texture2DSample,1);
//纹理寻址
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_VisMode(0,ob->Texture2DAddress,ob->Texture2DAddressColor,1);
this->ENobject::m_pd3dDevice->SetStreamSource( 0, ob->LHxx2DMVertexBuffer, 0, sizeof(LHxx2DSCREENVERTEX) );
this->ENobject::m_pd3dDevice->SetFVF( LHxx2DSCREENVERTEXFVF );
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2);
//基本图元:将顶点连结成基本图元
//能够绘制当前的索引数组;P56(多边形用)
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_POINTLIST, 0, 2*3);//顶点集合
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_LINELIST, 0,3*2 );//线段集合
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_LINESTRIP, 0,3*2);//不间断线段集合
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0,2);//三角形集合
this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0,2);//不间断三角形集合
// this->ENobject::m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0,2);//fan集合
}
//还原
TENd3dOb->ENrenderStateOb->RenderState_Reset();
for(i=0;i<8;i++)
{
m_pd3dDevice->SetTextureStageState( i,D3DTSS_COLOROP,D3DTOP_DISABLE);
}
}
void ENobject2D::LHxxFREE_2DIMAGE(char* Tname)
{
int i=0;
TList=ENobject2DListOb.GetNode(Tname);
LHxx2DIMAGE *ob=TList->ObjectData;
for(i=0;i<ob->LHxx2DATMaxFrame;i++)
{
if(ob->LHxx2DTexAT[i].LHxxATTexture!=NULL)
{
SAFE_RELEASE( ob->LHxx2DTexAT[i].LHxxATTexture);
ob->LHxx2DTexAT[i].LHxxATTexture=NULL;
if(ob->LHxx2DTexAT[i].LHxxAlphaData!=NULL)
{
free(ob->LHxx2DTexAT[i].LHxxAlphaData);
ob->LHxx2DTexAT[i].LHxxAlphaData=NULL;
}
}
}
free(ob->LHxx2DTexAT);
if(ob->LHxx2DMatrixOb)
{
delete ob->LHxx2DMatrixOb;
ob->LHxx2DMatrixOb=NULL;
}
free(ob->LHxx2DVertex);
SAFE_RELEASE( ob->LHxx2DMVertexBuffer);
//用图片生成路径存放数据对象
ob->ImagePathOb.clear();
ENobject2D::count2DOb_LIST--;//计算有多少个2D对象在LIST中.
delete ob;
ob=NULL;
ENobject2DListOb.EraseNode(Tname);//pass
}
#include"ENobject2D.h"
#include "ENd3d.h"
void ENobject2D::LHxxCREATE_2DTEXTURE(int tx,int ty,int tw,int th,
int numframe,int transverse,int curframe,char *rname,
char *dname,int x,int y
)
{
int i=0,k=0;
//检测是否有这个名.
bool btexture=ENobject2DListOb.CheckNode(dname);
if(btexture==true)
{
MessageBox(this->ENobject::hWnd, "2D图对象名相同,加载失败", "error texture name", MB_OK);
return;
}
ENobject2DListOb.PushBegin(dname,0);//pass
TList=ENobject2DListOb.GetNode(dname);
TList->ObjectData=new LHxx2DIMAGE;
LHxx2DIMAGE *ob=TList->ObjectData;
TList->ObjectData->LHxx2DTexAT=(LHxxTEXAT*)malloc(sizeof(LHxxTEXAT)*numframe);
memset(TList->ObjectData->LHxx2DTexAT,0x00,sizeof(TList->ObjectData->LHxx2DTexAT));
//大图
ENListData<TextureBuffer,void,void> *Tlist_source=
ENresource::ENresourceListOb.GetNode(rname);
//源图大小
int width_source=Tlist_source->ObjectData->BMPdata.biWidth;
int height_source=Tlist_source->ObjectData->BMPdata.biHeight;
//将源大图RGB值,分配给临时指针
UCHAR *bmpdata_source=Tlist_source->ObjectData->bmpdata;
//dest
int width_dest=tw;//每一帖的大小
int height_dest=th;
//transverse:有几列
//有几行
int lenghtways=numframe/transverse;
for(k=0;k<numframe;k++)
{
int offx=tx+k%transverse*tw;
int offy=ty+k/transverse*th;//计出y偏移
//alpha分配空间
TList->ObjectData->LHxx2DTexAT[k].LHxxAlphaData=
(UCHAR*)malloc(sizeof(UCHAR)*width_dest*height_dest);
//创建页面
unsigned char *pch=CreateTextueBuffer(bmpdata_source,width_source,
height_source,TList->ObjectData->LHxx2DTexAT[k].LHxxATTexture,
TList->ObjectData->LHxx2DTexAT[k].LHxxAlphaData,width_dest,height_dest,
offx,offy);
//包含分配空间
//将bmpdata copy to TList->ObjectData->LHxx2DTexAT[k].bmpdata,所以不能free bmpdata
memcpy(&TList->ObjectData->LHxx2DTexAT[k].bmpdata,&pch,sizeof(pch));//内存COPY
}
LHxx2DSCREENVERTEX g_Vertices[] =
{
{ 0.0f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f}, //红色
{ 300.0f, 0.0f, 0.5f, 1.0f, 1.0f, 0.0f},//蓝色
{ 0.0f , 400.0f, 0.5f, 1.0f, 0.0f, 1.0f},//绿色
{ 300.0f, 400.0f, 0.5f, 1.0f, 1.0f,1.0f }//白色
};//0xffff0000//红色0xff00ff00//蓝色 0xff00ffff//绿色0xffffffff//白色
//给存放矩阵点分配空间
ob->LHxx2DVertex=(LHxx2DSCREENVERTEX*)malloc(4*sizeof(LHxx2DSCREENVERTEX ));
memset(ob->LHxx2DVertex,0,4*sizeof(LHxx2DSCREENVERTEX ));
// Create the vertex buffer.
if( FAILED(this->ENobject::m_pd3dDevice->CreateVertexBuffer( 4*sizeof(LHxx2DSCREENVERTEX),
0, LHxx2DSCREENVERTEXFVF,
D3DPOOL_DEFAULT, &ob->LHxx2DMVertexBuffer,NULL ) ) )
{
MessageBox(this->ENobject::hWnd, "CREATE_2DIMAGE vbuf", "error tex", MB_OK);
return;
}
// Now we fill the vertex buffer. To do this, we need to Lock() the VB to
// gain access to the vertices. This mechanism is required becuase vertex
// buffers may be in device memory.
LHxx2DSCREENVERTEX* pVertices;
if( FAILED( ob->LHxx2DMVertexBuffer->Lock( 0, sizeof(g_Vertices),
(void**)&pVertices, 0 ) ) )
{
return;
}
memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
for( i=0; i<4; i++ )
{
ob->LHxx2DVertex[i]=((LHxx2DSCREENVERTEX *)pVertices)[i];
}
ob->LHxx2DMVertexBuffer->Unlock();
strcpy(ob->LHxxName,dname);
ob->LHxxPicW=width_dest*transverse;
ob->LHxxPicH=numframe/transverse*height_dest; // 图资源的宽高
ob->LHxxIw=width_dest;
ob->LHxxIh=height_dest; // 显示的宽与高度
ob->LHxxIx=x;
ob->LHxxIy=y; // 显示的位置
ob->LHxxVisible=1; // 是否显示
ob->LHxx2DATMaxFrame=numframe; // 纹理动画总贴数
ob->LHxx2DATCurFrame=curframe; // 当前纹理动画贴数
ob->LHxx2DATMode=0; // 动画的播放模式 0loop 1end visible=0 2end visible=1 f=max 3end visible=1 f=0
ob->LHxx2DATEnd=0; //最后一帖
ob->LHxx2DATDelta=1; // 时间计数
ob->LHxx2DATFrameSpeed=0.3; // 纹理动画播放的速度
ob->LHxxScaleX=1;
ob->LHxxScaleY=1;
ob->LHxxAngle=0;
ob->LHxxRw=width_dest;
ob->LHxxRh=height_dest; // 显示的宽与高度(初始)
ob->LHxxRx=x;
ob->LHxxRy=y; // 显示的位置(初始)
ob->LHxxMirrorXOff=1;//是否镜像
ob->LHxxMirrorYOff=1;//是否镜像
ob->Texture2DAddress=0;//纹理寻址
ob->Texture2DAddressColor=D3DXCOLOR(255,0,0,255);//边框纹理寻址颜色
ob->Texture2DSample=2;//2D纹理采样
ob->Texture2DTransverse=transverse;//纹理横向帖数
ob->SourceOffX=tx;//在大图缓冲区的偏移位置
ob->SourceOffY=ty;//在大图缓冲区的偏移位置
ob->LHxx2DMatrixOb=new ENmatrix(hWnd,m_pd3dDevice); //每一个对象的视区及自身的矩阵
LHxxMOVE_2DIMAGE(dname,ob->LHxxIx,ob->LHxxIy,ob->LHxxMirrorXOff,ob->LHxxMirrorYOff);
}
void ENobject2D::LHxxFRAME_2DIMAGE(float delta,char *Tname)
{
TList=ENobject2DListOb.GetNode(Tname);
LHxx2DIMAGE *ob=TList->ObjectData;
if(ob->LHxxVisible<=0){return;}
float time=TENd3dOb->ENtimeOb->getSecond();
//每帖更新
LHxxFrameUp_2DIMAGE(Tname,time);
}