这个类用来管理已经选择的植物卡片。即待选面板中点了一张,左侧增加一张。点击左侧,则又恢复到待选面板中。
待选面板点中一张,发送通知,传递点中植物卡片名字。已选管理器中创建一张植物开片,并加入到已选的植物卡片容器中。
voID CHaveChooseCardMgr::addHaveCard(std::string sname){ int iSize = m_ListHaveCard.size(); int iYpos = HAVE_INIT_Y - iSize*HAVE_Y_CNT;//纵坐标为递减 CWaitChooseCard *waitCard = CWaitChooseCard::create();//新建一个卡片 waitCard->setsname(sname);//传入的名字为新建卡片的名字 waitCard->createByname(sname);//卡片根据对象名字从卡片缓冲池装载图片 waitCard->setposCard(Point(HAVE_INIT_X,iYpos)); waitCard->setposition(Point(HAVE_INIT_X,iYpos)); //CGlobalComm::getInstance()->getgameMapLayer()->addChild(waitCard,LAYER_SECOND); this->addChild(waitCard,LAYER_SECOND); m_ListHaveCard.pushBack(waitCard);}
当在已选管理器中点中一张卡片,做以下几件事:1.剩下的卡片依次移动位置;2.发送删除这个已选卡片的通知给待选面板;3.从已选容器中删除;4.父节点删除这个卡片。
int iCardPosInList = 0; //当前点击卡片在列表中的位置 Vector<CWaitChooseCard*>::iterator itCard = m_ListHaveCard.find(clickCard);//迭代器返回找到的索引 if (itCard != m_ListHaveCard.end())//如果迭代器不是指向末尾,说明寻找成功 { iCardPosInList = std::distance(m_ListHaveCard.begin(),itCard);//得到位置是以0开始的位置 } int iSize = m_ListHaveCard.size(); //CGlobalComm::getInstance()->getobjWaitCard()->cardreset(clickCard->getsname()); NOTIFY->postNotification(NOTIFY_ReduceChooseCard,(Ref*)((clickCard->getsname()).c_str())); for (int i = iSize - 1; i > iCardPosInList; i--) { m_ListHaveCard.at(i)->setposCard(m_ListHaveCard.at(i - 1)->getposCard()); m_ListHaveCard.at(i)->setposition(m_ListHaveCard.at(i - 1)->getposCard()); } //m_ListHaveCard.at(0)->setposition(Point(HAVE_INIT_X,100)); m_ListHaveCard.eraSEObject(clickCard); clickCard->removeFromParentAndCleanup(true); haveChooseReduce();
实现效果
总结
以上是内存溢出为你收集整理的cocos植物大战僵尸(六)已选植物卡片管理器类全部内容,希望文章能够帮你解决cocos植物大战僵尸(六)已选植物卡片管理器类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)