cocos2dx 植物大战僵尸 11 场景自带的植物
来源:互联网 发布:卓讯云客宝mac破解版 编辑:程序博客网 时间:2024/04/30 10:43
本次实现关卡中一开始就存在的实体,如屋顶关卡一开始会有花盆,有的关卡中一开始就有墓碑等。首先在tmx中添加一个对象层,名称为entity object layer,保存着这些对象
这个关卡中添加了两个睡莲,可以看到右侧,名称为LilyPad,类型为plant,加上类型是便于以后的扩展,如植物类交给PlantLayer,僵尸类交给ZombieLayer等,目前仅仅实现添加植物。在levelStart()函数里即在画面回转时产生这些植物。
void GameScene::levelStart(){//镜头向左回转,之后开始游戏DelayTime*delayTime = DelayTime::create(0.5f);MoveTo*move = MoveTo::create(3.f,Point(-100,0));//-100,0CallFunc*end = CallFunc::create([this](){this->scheduleUpdate();});auto seq = Sequence::create(delayTime,move,end,nullptr);m_pLevelLayer->runAction(seq);//进行对象层的解析auto &groups = m_pLevelLayer->getEntityObjects();for (const auto&value : groups){const auto& object = value.asValueMap();auto type = object.at("type").asString();auto name = object.at("name").asString();auto x = object.at("x").asInt();auto y = object.at("y").asInt();//获取对应的terrainauto terrain = m_pLevelLayer->getClickedTerrain(Point(x,y));//生成的植物也得符合地形if (type == "plant"){auto card = m_pCardLayer->makeCard(name,CardType::Consumable);bool bRet = this->tryPlanting(card,terrain);}}}这里使用的还是tryPlanting函数,这里需要一个card和terrain的。逻辑是每次都生成一个card,然后再生成对应的植物,如果以后实现卡片选择界面就可以使用卡片选择界面的card来实现,因为卡片选择界面里有着所有的卡片,只不过没有拥有的卡片是不可点击的罢了。这次新增的makeCard函数,其实就是从原先的addCard分出来的一个函数。
Card*CardLayer::makeCard(const std::string& name,CardType type){Card*card = nullptr;//获取加载的对应的结构体auto cardStruct = StaticData::getInstance()->getCardStruct(name);if (cardStruct == nullptr){return false;}if (type == CardType::Common){card = Card::create(name,cardStruct->worth);//设置准备时间card->setCurCD(cardStruct->readyTime);card->setCD(cardStruct->cd);}else if (type == CardType::Consumable){card = Card::createConsumableCard(name);}//设置一些基础属性card->setNeedfulTerrains(cardStruct->terrains);card->setNecessoryItem(cardStruct->necessoryItem);card->setActiveTime(cardStruct->active);return card;}而addCard就简单多了,内部只是调用了makeCard方法
bool CardLayer::addCard(const std::string &name,CardType type,const Point&pos){auto card = this->makeCard(name,type);card->setPosition(pos);m_cards.push_back(card);this->addChild(card);return true;}然后添加了移除卡片函数。
void CardLayer::removeCard(Card*card){//当前选中了该卡片,则先取消选中if (card == m_pSelectedCard)this->unselectedCard();auto it = find_if(m_cards.begin(),m_cards.end(),[card](Card*c){return c == card;});if (it != m_cards.end()){m_cards.erase(it);card->removeFromParent();}}这个函数的作用就是如果选中了卡片,就先取消选中,然后再移除卡片。
效果如下
阅读全文
1 0
- cocos2dx 植物大战僵尸 11 场景自带的植物
- cocos2dx 植物大战僵尸 6 植物层
- cocos2dx 植物大战僵尸 13 僵尸的产生
- cocos2dx 植物大战僵尸 14 僵尸的攻击
- cocos2dx 植物大战僵尸 12 僵尸卡片
- cocos2dx 植物大战僵尸 17 路障僵尸
- cocos2dx 植物大战僵尸 19 读报僵尸
- cocos2dx 植物大战僵尸 23 撑杆僵尸
- cocos2dx 植物大战僵尸 5 塔基Terrain的更新
- cocos2dx 植物大战僵尸 10 铲子的实现
- cocos2dx 植物大战僵尸 15 豌豆射手的实现
- cocos2dx 植物大战僵尸 21 塔基的更新
- cocos2dx 植物大战僵尸 9 容器植物类
- cocos2dx 植物大战僵尸 3 卡片
- cocos2dx 植物大战僵尸 4 太阳
- cocos2dx 植物大战僵尸 18 土豆雷
- cocos2dx 植物大战僵尸 20 卷心菜投手
- cocos2dx 植物大战僵尸 8 植物类和向日葵的小更新
- 查找(1)--静态查找
- Java实现设计模式之外观模式
- Git and GitHub tutorial
- 环套树
- Loss Function 整理
- cocos2dx 植物大战僵尸 11 场景自带的植物
- LeetCode 404. Sum of Left Leaves 递归终止条件
- 5月英语总结--I will do it well.
- Java解析多个ClassPath中的properties文件, 相同的属性将会覆盖之前的载入
- C#168课的主要内容
- 解析xml的方法和实例
- CUDA 编程 之并行计算思想
- Java中的xml文件dom方式解析
- 词典结构