《塔防类手游开发教程》 第六节 在用户选中坐标建塔

来源:互联网 发布:中国电信大数据事业部 编辑:程序博客网 时间:2024/06/18 10:39

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);

}

0 0
原创粉丝点击