1、放置炮塔,在规定的区域进行放置,不能重复放置,不能再其他的地方放置该炮塔;
代码: TMXTiledMap * map=(TMXTiledMap *)this->getChildByTag(888);
CCLOG("您点击了地图的第%d行,第%d列,这个位置地图编号%d",nowRow,nowCol,
map->getLayer("bg")->getTileGIDAt(Vec2(nowCol,nowRow))
);
int tid=map->getLayer("bg")->getTileGIDAt(Vec2(nowCol,nowRow));
bool canTouch=false;
//如果这个块是可以放塔的则弹出炮塔选择的面板
if(!map->getPropertiesForGID(tid).isNull())
{
auto tileTemp = map->getPropertiesForGID(tid).asValueMap();
//判断编号为gid的tiled有没有属性
if(!tileTemp.empty())
{ //tileTemp.at("canTouch").asInt()
canTouch=true;
CCLOG("这里可以放塔gid canTouch=%d",tileTemp.at("canTouch").asInt());
}
}
//这个位置是否已经放过塔
if (mapinfo[nowRow][nowCol]>0) {
canTouch=false;
}
//
if(canTouch)
{
CCLOG("塔的选择面板");
addTDSelect(8-nowRow,nowCol);
}else
{
auto tips = Sprite::createWithSpriteFrameName("no.png");
tips->setAnchorPoint(Vec2(0,0));
tips->setPosition(nowCol*71,(8-nowRow)*71);
this->addChild(tips);
tips->runAction(
Sequence::create(DelayTime::create(0.8f),
CallFunc::create(CC_CALLBACK_0(Sprite::removeFromParent, tips)),
NULL));
}
2、移除炮塔:
代码:
//移除建塔面板
if(this->getChildByTag(1001)!=NULL)
{
this->removeChildByTag(1001);
}
3、添加塔的选择面板,在可选的地方才能建塔;
//添加塔的选择面板
void GameScene::addTDSelect(int r,int c)
{
auto Image= Sprite::createWithSpriteFrameName("towerPos.png");
int height=Image->getContentSize().height;
int width=Image->getContentSize().width;
auto bt01= Sprite::createWithSpriteFrameName("ArrowTower1.png");
auto bt01_select= Sprite::createWithSpriteFrameName("ArrowTower1.png");
bt01_select->setScale(1.1);
auto bt02= Sprite::createWithSpriteFrameName("AttackTower1.png");
auto bt02_select= Sprite::createWithSpriteFrameName("AttackTower1.png");
bt02_select->setScale(1.1);
auto bt03= Sprite::createWithSpriteFrameName ("MultiDirTower1.png");
auto bt03_select= Sprite::createWithSpriteFrameName ("MultiDirTower1.png");
bt03_select->setScale(1.1);
//将3个Sprite转为Menu接收用户事件
auto mitem01=MenuItemSprite::create(bt01, bt01_select, CC_CALLBACK_1(GameScene::selectTD, this));
auto mitem02=MenuItemSprite::create(bt02, bt02_select, CC_CALLBACK_1(GameScene::selectTD, this));
auto mitem03=MenuItemSprite::create(bt03, bt03_select, CC_CALLBACK_1(GameScene::selectTD, this));
mitem01->setTag(10);
mitem02->setTag(11);
mitem03->setTag(12);
mitem01->setAnchorPoint(Vec2(1,0));
mitem02->setAnchorPoint(Vec2(0.5,0));
mitem03->setAnchorPoint(Vec2(0,0));
auto menuTD=Menu::create(mitem01,mitem02,mitem03,nullptr);
// Image->addChild(bt01);
// Image->addChild(bt02);
// Image->addChild(bt03);
menuTD->setPosition(Vec2::ZERO);
Image->addChild(menuTD);
mitem01->setPosition(Vec2(0,height));
mitem02->setPosition(Vec2(width/2,height));
mitem03->setPosition(Vec2(width,height));
Image->setTag(1001);
this->addChild(Image);
Image->setAnchorPoint(Vec2(0,0));
Image->setPosition(c*71,r*71);
}