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

尊重开发者的劳动成果,转载的时候请务必注明出处: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);
			}
		}

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


思考:如何实现有旋转,非直线轨迹的鱼群效果?

你可能感兴趣的:(动画,数据,移动,cocos2d-x,捕鱼达人)