Cocos2d-x如何创建底部标签栏

时间:2018-03-05 16:40:27

标签: cocos2d-x

刚开始希望这不是一个问题

对于我正在研究的游戏,我希望有不同的标签,其效果类似于iOS底部标签控制器,如图所示:

enter image description here

我不知道如何创造这个?这一切都应该在一个场景中打开和关闭不同的层吗?我应该使用多个场景吗?

似乎将其保留在一个场景中并不会真正缩放。这通常是怎么做的,cocos2d-x有某种容器概念吗?

2 个答案:

答案 0 :(得分:0)

我建议您有2层:

  1. 第一层将处理图像。我猜你可以用 ImageView的。并按照你想要的尺寸定位它们。

  2. 第二部分是一个标签菜单,可以用一秒钟实现 您将在其中添加按钮和背景的图层。为了 按钮使用Button类。

  3. 我希望有所帮助。

答案 1 :(得分:0)

 bool ScreenController::init(){

                if(Layer::init())
                {
                    footer = Footer::create();
                     footer->setDelegate(this);
                    this->addChild(footer,3);

         auto homeLayer= HomeView::create(psize,this);
                homeLayer->setPosition(Point(0,footer->getBoundingBox().getMaxY()));
        //        homeLayer->setAllApiFireTo(this);

                auto rakeLayer = RakeView::create(psize);
                rakeLayer->setPosition(Point(0,footer->getBoundingBox().getMaxY()));

                rakeLayer->setDelegate(this);

                Tablayers = LayerMultiplex::create();

                Tablayers->addLayer(homeLayer);
                Tablayers->addLayer(rakeLayer);

                this->addChild(Tablayers);
            }
            }

             void ScreenController::TabControllerAction(ViewDisplayType type) {

                Tablayers -> switchTo(index);
                }




    bool Footer::init(){

        if(Layer::init())
        {

            this->setContentSize(Size(constantDeviceSize.width,108*gamescaleY));

    //        auto btlayer  = LayerColor::create(Color4B::RED,this->getContentSize().width,this->getContentSize().height);
    //        
    //        this->addChild(btlayer);


            SubButton*sb1 = SubButton::create(Size(this->getContentSize().width/5,this->getContentSize().height),"Home.png","Home.png",CC_CALLBACK_2(Footer::callMenuItem, this) );
            sb1->setAnchorPoint(Point(0,0));
            sb1->setPosition(Point(0,0));
            sb1->addTitleText("Home", SFUI_Regular.c_str());
            sb1->colorEfact(true);
            sb1->setColorbtn(Color3B::WHITE,colorSkyBlue3B);
            this->addChild(sb1);

            SubButton*sb2 = SubButton::create(Size(this->getContentSize().width/5,this->getContentSize().height),"Balance.png","Balance.png",CC_CALLBACK_2(Footer::callMenuItem, this));
            sb2->setAnchorPoint(Point(0,0));
            sb2->setPosition(Point(sb2->getBoundingBox().size.width,0));
            sb2->addTitleText("Rake", "arial.ttf");
            sb2->colorEfact(true);
            sb2->setColorbtn(Color3B::WHITE,colorSkyBlue3B);
            this->addChild(sb2);
     sb1->setDisplayType(myHomeView);
            sb2->setDisplayType(myRakeView);
        }


void Footer::selectionByController(int tab)
{

    auto tmpbar = dynamic_cast<SubButton *>(this -> getChildren().at(tab-1));

    callMenuItem(tmpbar, TouchBegan);

}
void Footer::callMenuItem(Ref *sender, TouchEvent event)
{

    if(event==TouchBegan)
    {
        auto sbitem =  (SubButton*)sender;
        if(event==TouchBegan)
        {
            sbitem->selected();

            if(this->getDelegate())
            {
                this->getDelegate()->TabControllerAction(sbitem->getDisplayType());/*call to parant*/

            }
            CCLOG("CLICKED!->%d",sbitem->getTag());
        }

        for (int i = 0; i < this->getChildren().size(); i++)
        {
            auto tmpbar = dynamic_cast<SubButton *>(this -> getChildren().at(i));

            if (tmpbar != NULL && tmpbar -> getTag() != sbitem -> getTag())
            {
                tmpbar ->unSelected();

            }
        }
    }



}