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

📄 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()
{}
bool anmobj::manmove(int i)
{	float stx=.5f,stz=.5f;		
	float qx=man[i].qd[0]-man[i].zd[0];	
	float qz=man[i].qd[1]-man[i].zd[1];
	float qxa=abs(qx);						
	float qza=abs(qz);						
	if((int)qx==0&&(int)qz==0)	return true;	
	if(qxa<stx)  stx=qxa;					
	if(qza<stz)  stz=qza;					
	if((int)qx!=0) man[i].qd[0]-=qxa/qx*stx;
	if((int)qz!=0) man[i].qd[1]-=qza/qz*stz;	
	if((int)qx>0&&(int)qz<0) {re[i]=45*1;return false;}
	if((int)qx>0&&(int)qz>0) {re[i]=45*3;return false;}	
	if((int)qx<0&&(int)qz>0) {re[i]=45*5;return false;}	
	if((int)qx<0&&(int)qz<0) {re[i]=45*7;return false;}	

	if			 ((int)qz<0) {re[i]=45*0;return false;}
	if((int)qx>0)			 {re[i]=45*2;return false;}	
	if           ((int)qz>0) {re[i]=45*4;return false;}	
	if((int)qx<0)			 {re[i]=45*6;return false;}	
	return false;
}
void anmobj::setman(int i,float y)
{	if(model[0]==NULL) return;
	srand(timeGetTime());			
	man[i].qd[2]=y;						
	counter[i]++;						
	if(counter[i]>2)				
	{	counter[i]=0;					
		if(man[i].dz!=19) frame[i]++;
		else {frame[i]=man[i].death;}
		if(man[i].dz==1)				
		{if(manmove(i)==true)		
		 {if(man[i].dz>15) 
			{if(man[i].dz==16) man[i].death=177;
			 if(man[i].dz==17) man[i].death=183;
			 if(man[i].dz==18) man[i].death=189;
			 man[i].dz=19;frame[i]-=1;
			 return;
			}
		  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>15) 
			{if(man[i].dz==16) man[i].death=177;
			 if(man[i].dz==17) man[i].death=183;
			 if(man[i].dz==18) man[i].death=189;
			 man[i].dz=19;frame[i]-=1;
			 return;
			}
		  if(man[i].dz!=1)			
			{ man[i].dz=dongzuo[rand()%7];
			  if(rand()%10==0)		
				{man[i].dz=1;			
				 man[i].zd[0]=RAND_COORD((MAP_W-1)*MAP_SCALE);
				 man[i].zd[1]=RAND_COORD((MAP_W-1)*MAP_SCALE);
				}
			}
		  frame[i]=anim[0][man[i].dz].start;
		}
	}
///////////////////////////////////////////////////////////////////
	glPushAttrib(GL_CURRENT_BIT);
	glPushMatrix();
	glTranslatef(man[i].qd[0],man[i].qd[2], -man[i].qd[1]);
	glRotatef(re[i]+90,0,1,0);//
	glScaled(.06f,.06f,.06f);//
	glEnable(GL_TEXTURE_2D);//
	if(model[0]!=NULL)
	{	texture[0]->ChangeSettings(GL_LINEAR,GL_LINEAR_MIPMAP_LINEAR,
	                             GL_CLAMP,GL_CLAMP,0);
		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);
		md2_drawModel (model[1],(int)frame[i],0,0);
	}
	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 + -