⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 anmobj.cpp

📁 代码实现物体的运动、键盘控制视角、3D图形的组合
💻 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 + -