cocos2dx 植物大战僵尸 21 塔基的更新

来源:互联网 发布:mysql安装教程 windows 编辑:程序博客网 时间:2024/05/21 08:01

在前面的帖子中,塔基生成有两种方法,一种是通过tmx的tile layer,图层进行创建,另一种是通过对象层进行创建,需要注意的是,僵尸的findTerrainOfZombieCollision,是查找和僵尸碰撞的塔基的,内部实现如下

Terrain*GameScene::findTerrainOfZombieCollision(ZombieBase*zombie){//获取当前僵尸所在的行auto row = zombie->getRow();auto dir = zombie->getZombieDir();auto r = zombie->getCollisionBoundingBox();const auto&terrains = m_pLevelLayer->getTerrainsOfRow(row);Terrain*terrain = nullptr;//地形从左向右遍历if (dir == ZombieDir::Left){for (auto it = terrains.begin();it != terrains.end();it++){auto t = *it;auto rect = t->getBoundingBox();if (r.intersectsRect(rect)){terrain = t;break;}}}//地形从右向左遍历else if (dir == ZombieDir::Right){for (auto it = terrains.end();it != terrains.begin();it--){auto t = *it;auto rect = t->getBoundingBox();if (r.intersectsRect(rect)){terrain = t;break;}}}return terrain;}
这里需要保证塔基是排序好的,所以需要在LevelLayer中对塔基进行排序,排序方法类似于僵尸的排序。

bool LevelLayer::terrainComparisonLess(Terrain* n1, Terrain* n2){return n1->getPositionX() < n2->getPositionX();}
在LevelLayer::init中添加

//获取地形TerrainMaker maker;maker.startParse(m_pTiledMap,SDL_CALLBACK_1(LevelLayer::makeTerrainCallback,this));//塔基加载完成for (auto it = m_terrains.begin();it != m_terrains.end();it++){auto & terrains = it->second;sort(terrains.begin(),terrains.end(),terrainComparisonLess);}
即使用排序算法,这个需要注意。

原创粉丝点击