少年啊,来一发昆特吗(三)——昆特牌的选择界面

昆特牌的显示搞定后,之后就是卡牌的整备界面了,既然要整备卡牌,自然涉及到卡牌数据的存储,这里采用了plist的方式进行存储(不过这是错误的方式,=。=之后会还债的),推荐使用userdefault或者sqllite进行存储,存储方式大同小异,这里就不介绍plist的存储方式了,稍后会放出修改后使用sqlite的代码

卡牌所需要的数据,在上一节已经说过了,这里直接上代码,plist形式的,数据库或者userdefault基本结构也差不多

<key>09</key>
        <dict>
            <key>cardnum</key>
            <string>1</string>
            <key>type</key>
            <string>hero</string>
            <key>power</key>
            <string>10</string>
            <key>attackrange</key>
            <string>longrange</string>
            <key>Ability</key>
            <string>----</string>
            <key>img</key>
            <string>cardimage/Northern Realms Deck/Phillipa-Eilhart.jpg</string>
            <key>cardname</key>
            <string>Phillipa-Eilhart</string>
            <key>maxnum</key>
            <string>1</string>
        </dict>

一,势力切换
昆特牌分4个势力,北方王国,帝国,松鼠党,以及怪物,中立牌时任何势力都能使用的卡牌,4个势力的定义,在切换势力的同时,卡牌也需要切换成对应的势力,同时卡组也需要切换到对应势力的卡组,这里采用将卡牌存在数组中或者vector中,在切换的同时切换数组,并调用tableview->reloadData()函数,这个函数是用来刷新tableview的,目的是将显示切换后卡牌。
基本的切换代码很容易,下面是向右切换的代码,向左的一样,只不过把+改成-就行了

void CardSelectScene::righttouch(cocos2d::Ref* pSender,Control::EventType controlEvent){
    LabelTTF *label=(LabelTTF *)this->getChildByName("powername");
    if(i==3){
        i=0;
    }else{
        i++;
    }
    this->Race=i;
    label->setString(UTEXT(influence[i].getCString()));
    unselect=0;
    selected=0;
    selectnum=0;
    querycarddata();
    tableview->reloadData();
    squerycarddata();
    stableview->reloadData();
    updatenum();
    loadleaderinfo();
    setleader(0);

}

二,类别切换
通过点击类别按钮来过滤卡牌,大致和切换势力一样,通过参数unselect,select来控制是将卡组和势力卡牌切换到哪个类别

void CardSelectScene::itemselectd(cocos2d::Ref* pSender){   
    MenuItemSprite *item=(MenuItemSprite *)pSender;
    if(item->getName()=="allcard"){
        log("%s","allcardbeselected");
        this->unselect=0;
        //this->NorthDeckimgpath=readcardimginfo("cardinfo/northKingdom.plist");
    }else if(item->getName()=="shortrange"){
        log("%s","shortrangebeselected");
        this->unselect=1;
    }else if(item->getName()=="longrange"){
        log("%s","longrangebeselected");
        this->unselect=2;
    }else if(item->getName()=="Grange"){
        log("%s","Grangebeselected");
        this->unselect=3;
    }else if(item->getName()=="HCard"){
        log("%s","HCardbeselected");
        this->unselect=4;
    }else if(item->getName()=="TCard"){
        log("%s","TCardbeselected");
        this->unselect=5;
    }else if(item->getName()=="bCard"){
        log("%s","bCardbeselected");
        this->unselect=6;
    }
    querycarddata();
    tableview->reloadData();
}

querycarddata()函数是用来过滤该使用哪个数组的函数

void  CardSelectScene::querycarddata(){
    Array *m_array =Array::create();
    switch(i){
        //北方王国
        case 0:
            m_array->addObjectsFromArray(this->NorthDeckimgpath);
            //m_array->addObjectsFromArray(this->Neutralimgpath);
            array=query(m_array);
        break;
        //帝国
        case 1:
            m_array->addObjectsFromArray(this->NiffDeckkimgpath);
           // m_array->addObjectsFromArray(this->Neutralimgpath);
            array=query( m_array);
        break;
        //怪兽
        case 2:
            m_array->addObjectsFromArray(this->monsterimgpath);
           // m_array->addObjectsFromArray(this->Neutralimgpath);
            array=query( m_array);
        break;
        //松鼠党
        case 3:
            m_array->addObjectsFromArray(this->Scoiadeckimgpath);
          //  m_array->addObjectsFromArray(this->Neutralimgpath);
            array=query( m_array);
        break;
        default:
            log("error");


    }
    array->retain();

}

三、卡牌点击
需要注意一点的是点击的层级,否则有可能导致触摸被吞掉,如果是menu的话,是默认最高级别的触摸,所以如果不想被menu吞掉触摸的话就要改变menu的优先级,或者通过this->swallowtouch(false),这样触摸就不会被吞掉而正常被下发到下一级别了(这里需要注意true是吞,默认是true),点击卡牌后需要将势力卡牌放到卡组中去,点击卡组放到势力卡牌中去,大致的实现过程是在tablecelltouched中进行处理,处理过程大致如下:

auto sp=cell->getChildren();
    auto point=table->convertToNodeSpace(Firsttouchpos);
    float y=point.y-((int)(point.y/150))*150;
    auto touchPos=Point(point.x,y);
    auto idx=cell->getIdx();
    auto size=Director::getInstance()->getWinSize();
    for(auto a:sp){
        auto child=(LayerColor *)a;
        if(child->getBoundingBox().containsPoint(touchPos)){
            //卡牌处理
        }

    }

四、切换到游戏场景
在cocos2dx中是很容易的直接通过director中提供的replacescene就可以将场景切换过去,需要注意下这里需要传递一些参数,传递的方式很容易通过定义的scene获得场景下的layer(这里需要注意自己存放的layer是在第几层,否则就会出错),直接通过对面提供的函数来对其进行赋值

this->stopAllActions();
        auto scene=Gamescene::createScene();
        Gamescene *layer = (Gamescene*)scene->getChildren().at(1);
        //layer->setUserData(String::createWithFormat("%d",decknumber));
        layer->setdeckarray(sarray);
        Dictionary *str=(Dictionary *)leader->objectAtIndex(selectnum);
        std::string chr=((String *)str->objectForKey("img"))->getCString();
        std::string chrf=((String *)str->objectForKey("Ability"))->getCString();
        layer->setleaderdata(chr,chrf);
        layer->setInflunce(UTEXT(influence[i].getCString()));
        //ascene->addChild(layer);
        //layer->setUserData(String::createWithFormat("%d",decknumber));
        Director::getInstance()->pushScene(scene);
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值