📄 anmobj.cpp
字号:
// anmobj.cpp: implementation of the anmobj class.
// 学程序编游戏系列丛书
// 唐明理 E_mail: cqtmL@163.com
//====================================================================
#include "stdafx.h"
#include "anmobj.h"
#include "baiscobj.h"
//////////////////////////////////////////////////////////////////////
int dongzuo[7]={0,2,2,7,12,14,14};
extern baiscobj* m_baiscobj;
//////////////////////////////////////////////////////////////////////
anmobj::anmobj()
{
}
anmobj::~anmobj()
{}
void anmobj::setman(int i,float y)//显示人
{ if(model[0]==NULL) return;
srand(timeGetTime());
counter[i]++;
if(counter[i]>1)
{ counter[i]=0;//动作延时
frame[i]++;
if(man[i].dz==1)//跑动中
{man[i].qd[0]-=.3f;
if(man[i].qd[0]-man[i].zd[0]<0) //到目标点
{man[i].dz=dongzuo[rand()%7];//选取一个姿势
frame[i]=anim[0][man[i].dz].start;//取动作首
}
}
if(frame[i]>anim[0][man[i].dz].end) //到动作尾
{ if(man[i].dz!=1) man[i].dz=dongzuo[rand()%7];
frame[i]=anim[0][man[i].dz].start;//取动作首
}
}
///////////////////////////////////////////////////////////////////
glPushAttrib(GL_CURRENT_BIT);//保存现有颜色属实性
glPushMatrix();//glPopMatrix();
glTranslatef(man[i].qd[0],y, -man[i].qd[1]);//位置
glRotatef(-180,0,1,0);
glScaled(.06f,.06f,.06f);
// glFrontFace (GL_CW);
glEnable(GL_TEXTURE_2D);
if(model[0]!=NULL)
{ texture[0]->ChangeSettings(GL_LINEAR,GL_LINEAR_MIPMAP_LINEAR,
GL_CLAMP,GL_CLAMP,0);//GL_MODULATE);
md2_drawModel (model[0],(int)frame[i],0,0);
}
if(model[1]!=NULL /*&& man[i].dz<size[1]-1*/)
{ texture[1]->ChangeSettings(GL_LINEAR,GL_LINEAR_MIPMAP_LINEAR,
GL_CLAMP,GL_CLAMP,0);//GL_MODULATE);
md2_drawModel (model[1],(int)frame[i],0,0);
}
// if(pp==1) Explosion(pos.x,pos.y,pos.z,1,.5f);//开枪
// glFrontFace (GL_CCW);////////////////
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glPopAttrib();//恢复前一属性
}
void anmobj::getobj(CString na)//
{ anim[0]=anim[1]=NULL; //动作序列
if(model[0]!=NULL) {delete[] model[0];model[0]=NULL;}
if(model[1]!=NULL) {delete[] model[1];model[1]=NULL;}
model[0] = md2_readModel(na+"tris.md2");
texture[0] = new Texture(na+"tris.PCX");
model[1] = md2_readModel(na+"weapon.md2");
texture[1] = new Texture(na+"weapon.pcx");
if(model[1]!=NULL) size[1] = md2_getAnimationCount(model[1]);
if(model[0]!=NULL)
{size[0] = md2_getAnimationCount(model[0]);
animations (model[0],0);//
for(int i=0;i<RNSHU;i++)
{counter[i]=0;
frame[i]=(float)(40+rand()%5);//
}
}
}
animation* anmobj::animations (md2_model_t* model,int p)
{ if (size[p] == 0) return 0;//
if(anim[p]!=NULL) delete[] anim[p];//
anim[p] = new animation[size[p]];//
for (int i=0; i<size[p]; i++)//
{ strcpy (anim[p][i].name,md2_getAnimationName(model,i));//
md2_getAnimationFrames(model,i,&anim[p][i].start,&anim[0][i].end);//
}
return 0;//
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -