您的位置:首页 > 移动开发 > Cocos引擎

【cocos2d-x IOS游戏开发-捕鱼达人12】鱼群效果

2013-12-05 22:12 344 查看
尊重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/17149543

上节回顾

【cocos2d-x IOS游戏开发-捕鱼达人11】鱼的产生和移动:完善

1、  鱼群效果设计

鱼群效果描述

一群鱼,保持队形(相对位置不变)从一个点移向另一个点

鱼群数据

锚点

速度

对应的鱼

初始位置

目标位置

处于鱼群中的鱼的数据

对应的鱼的模板ID

相对于鱼群锚点的偏移

2、  鱼群效果实现

需要处理的问题

鱼群出来时,其它鱼如何散场

鱼群走后,其它鱼如何回到场景

何时出现鱼群

先看下update的状态变换:

void CGameLogic::update( float dt )
{
if(m_eGameState != EGS_GAME_PLAY)
return;
m_fTime += dt;

switch(m_iSubState)
{
case EGPS_NORMAL:
{
static float total = 0;
total+=dt;
if(total > 3){
if(m_vecObjectsList.size()< config::CGameConfig::getMaxFishNum()){
createGameObject();
}
total = 0;
}

const std::vector<fishingjoy::config::SFishGroupData>& rGroupData = fishingjoy::config::CFishGroup::getGroupData();

CCLOG("m_fTime = %f,rGroupData[0].BeginTime = %f",m_fTime, rGroupData[0].BeginTime);

for(size_t i = 0; i < rGroupData.size(); ++i){
if(abs(m_fTime - rGroupData[i].BeginTime)<1){
m_iSubState = EGPS_GROUP_COME;

int extend = config::CGameConfig::getExtendSize();

float xs[] = {-extend,480+extend,	480+extend,-extend};
float ys[] = {-extend,-extend,		320+extend,320+extend};

std::vector<CGameObject*>::iterator it = m_vecObjectsList.begin();
std::vector<CGameObject*>::iterator end = m_vecObjectsList.end();
for(;it!=end;++it){
int randx = CCRANDOM_0_1()*4;
int randy = CCRANDOM_0_1()*4;
(*it)->setTarget(xs[randx],ys[randy]);
}
m_pGroupData = &rGroupData[i];
m_fGroupTime = m_fTime;
break;
}
}
}
break;
case EGPS_GROUP_COME:
{
if(m_fTime > m_fGroupTime + GROUP_COME_TIME){
m_iSubState = EGPS_GROUP;

for(int i = 0; i < m_pGroupData->Fishs.size(); ++i){
const config::SFishInGroup& rInGroup = m_pGroupData->Fishs[i];
createGameObject(rInGroup.FID,rInGroup.OffsetX + m_pGroupData->X + m_pGroupData->AnchorX,
rInGroup.OffsetY + m_pGroupData->Y + m_pGroupData->AnchorY,m_pGroupData->Speed
,rInGroup.OffsetX + m_pGroupData->TargetX + m_pGroupData->AnchorX,
rInGroup.OffsetY + m_pGroupData->TargetY + m_pGroupData->AnchorY);
}
m_fGroupTime = m_fTime;
break;
}
}
break;
case EGPS_GROUP:
{
if(m_fTime >  m_fGroupTime + m_pGroupData->LastTime){
m_iSubState = EGPS_GROUP_GO;
m_fGroupTime = m_fTime;
}
}
break;
case EGPS_GROUP_GO:
{
if(m_fTime > m_fGroupTime+ GROUP_GO_TIME){
std::vector<CGameObject*>::iterator it = m_vecObjectsList.begin();
std::vector<CGameObject*>::iterator end = m_vecObjectsList.end();
for(;it!=end;++it){
(*it)->randomTarget();
}
m_iSubState = EGPS_NORMAL;
}
}
break;
}

if(m_pGameScene)
m_pGameScene->update(dt);

std::vector<CGameObject*>::iterator it = m_vecObjectsList.begin();
std::vector<CGameObject*>::iterator end = m_vecObjectsList.end();
for(;it!=end;++it){
(*it)->update(dt);
}
}


本节源代码与工程文件:【资源引用页】

思考:如何实现有旋转,非直线轨迹的鱼群效果?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息