关于断点问题
头文件中定义了CWeapon *m_Weapon;
std::vector<CWeapon*> m_WeaponArray;
CMonkey::~CMonkey()
{
if(m_WeaponArray.size()!=NULL)
{//删除容器中所有的武器
for(std::vector<CWeapon*>::size_type i=0;i!=m_WeaponArray.size();++i)
{
SAFE_DELETE(m_WeaponArray[i]);
}
}
m_WeaponArray.clear();
}
case State_Attack://在run函数中当攻击玩家的时候产生武器,离开攻击距离的时候删除武器。
switch(m_MotState)
{
case Mot_run:
YingZhi(m_YingZhi,Motion_Run);
if(m_ActiveTime<=0.97f)
{//当时间小于1s时,随机出一个向量,进行随机移动
float Direction =6.28f/360.f*( float )(rand ()%360);
RandSpeed = CVector3 (0.f,0.f,1.f)* CMatrix (). rotationY (Direction )*30.f;
}
if(m_ActiveTime>=3.f)
m_MotState=Mot_Attack;
m_Speed=RandSpeed.normalize()*60.f;
break;
case Mot_Attack:
if(m_ActiveTime>=3.f)
{
m_Weapon = new CWeapon("Model/EnemyWeaponModel/qiu.par");//往容器中加胶水
m_Weapon->m_startPos = m_Weapon->m_Pos = getNodeTranslate(43);//胶水拿手上
m_WeaponArray.push_back(m_Weapon);
m_isThrow=true;
m_ActiveTime=0.f;
}
YingZhi(m_YingZhi,Motion_Attack);
if (m_isThrow)
{//扔出为真时,胶水应该拿在手上,下一步就是将其扔出
m_Weapon->m_startPos = m_Weapon->m_Pos = getNodeTranslate(43);
}
if (m_MotionTime >= 0.9f && m_isThrow)
{//胶水扔出
m_Weapon->m_endPos = game->m_GameAction->getRolePos();
m_Weapon->clacSpeed();
m_Weapon = NULL;
m_isThrow = false;
m_MotState=Mot_run;
}
m_Speed = (game->m_GameAction->getRolePos() - m_Pos).normalize();
break;
}
if(!intoFight(game->m_GameAction->getRolePos()))
{//当怪物没有到达攻击的距离进行追逐
m_State=State_Chase;
if(m_WeaponArray.size()!=NULL)
{
for(std::vector<CWeapon*>::iterator iter = m_WeaponArray.begin() ;iter != m_WeaponArray.end();)
{
SAFE_DELETE(*iter);
iter++;
}
m_WeaponArray.clear();
}
}
if(false/*如果角色死亡*/)
{//角色死亡,巡逻兵回到巡逻状态
m_State=State_Tramp;
}
if(m_Blood<=5.f)
{
m_State=State_Escape;
}
m_ActiveTime+=TimeManager::getElapsedTime();
m_PosOld=m_Pos;
m_Pos+=m_Speed*TimeManager::getElapsedTime();
break;
for (std::vector<CWeapon*>::iterator iter = m_WeaponArray.begin() ;iter != m_WeaponArray.end();)
{//遍历整个容器,如果有角色与武器的距离小于10.f则让球消失,或者球与怪物的距离大于200就消失,反之更新球
if(*iter!=NULL)
{
if ((*iter)->isHit(CVector3(game->m_GameAction->getRolePos().x,15.f,game->m_GameAction->getRolePos().z)) == true){//如果胶水失效 则消失
/*delete *iter;*/
//计算人物受到的伤害
float f_damage = getDamage(GetATK(),GetCritical(),0,0);
f_damage = DefenceDamage(f_damage,Personage::getInstance()->getPersonInfo().f_block,Personage::getInstance()->getPersonInfo().f_defence);
Personage::getInstance()->SetHP(-f_damage);
SAFE_DELETE(*iter);
iter = m_WeaponArray.erase(iter);
}else
if((*iter)->getBallPos().y<=-40.f)
{
SAFE_DELETE(*iter);
iter = m_WeaponArray.erase(iter);
}
else
{
(*iter)->update();
++iter;
}
}
else
{
++iter;
}
}