bool UIButtonTitleEffectTest::init() { if (UIScene::init()) { Size widgetSize = _widget->getContentSize(); // Add a label in which the button events will be displayed _displayValueLabel = Text::create("Button Title Effect", "fonts/Marker Felt.ttf",32); _displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f)); _displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + 20)); _uiLayer->addChild(_displayValueLabel); // Create the button auto button = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png"); button->setNormalizedPosition(Vec2(0.3f, 0.5f)); button->setTitleText("PLAY GAME"); button->setTitleFontName("fonts/Marker Felt.ttf"); button->setZoomScale(0.3f); button->setScale(2.0f); button->setPressedActionEnabled(true); Label *title = button->getTitleRenderer(); button->setTitleColor(Color3B::RED); title->enableShadow(Color4B::BLACK,Size(2,-2)); _uiLayer->addChild(button); // Create the button auto button2 = Button::create("cocosui/animationbuttonnormal.png", "cocosui/animationbuttonpressed.png"); button2->setNormalizedPosition(Vec2(0.8f, 0.5f)); button2->setTitleText("PLAY GAME"); auto title2 = button2->getTitleRenderer(); title2->enableOutline(Color4B::GREEN, 3); _uiLayer->addChild(button2); return true; } return false; }
// on "init" you need to initialize your instance bool HelloWorld::init() { if ( !LayerColor::initWithColor(Constants::BACKGROUND_COLOR) ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto learnBtn = ui::Button::create("BtnNormal", "BtnPressed", "", ui::Widget::TextureResType::PLIST); learnBtn->setScale9Enabled(true); learnBtn->setCapInsets(Rect(12, 12, 12, 12)); learnBtn->setSize(Size(177, 58)); learnBtn->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height/2 + 39)); learnBtn->getTitleRenderer()->setBMFontFilePath(Constants::FONT_BOLD30); learnBtn->setTitleText("Learn"); learnBtn->addTouchEventListener(CC_CALLBACK_2(HelloWorld::touchEvent, this)); this->addChild(learnBtn, 1, 1); auto testBtn = ui::Button::create("BtnBlueNormal", "BtnBluePressed", "", ui::Widget::TextureResType::PLIST); testBtn->setScale9Enabled(true); testBtn->setCapInsets(Rect(12, 12, 12, 12)); testBtn->setSize(Size(177, 58)); testBtn->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height/2 - 39)); testBtn->getTitleRenderer()->setBMFontFilePath(Constants::FONT_BOLD30); testBtn->setTitleText("Test"); testBtn->addTouchEventListener(CC_CALLBACK_2(HelloWorld::touchEvent, this)); this->addChild(testBtn, 2, 2); auto rateBtn = ui::Button::create("RateBtn", "", "", ui::Widget::TextureResType::PLIST); rateBtn->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + 30)); rateBtn->addTouchEventListener(CC_CALLBACK_2(HelloWorld::touchEvent, this)); this->addChild(rateBtn, 3, 3); return true; }
cocos2d::ui::Button* GameLayer::create_button(std::string text, BoolFuncNoArgs cb, bool start_disabled, ButtonState* btn_state) { auto param = ui::LinearLayoutParameter::create(); param->setGravity(ui::LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL); auto disable_button = [](ui::Button* button) { button->setTitleColor(Color3B::GRAY); button->setTouchEnabled(false); button->setPressedActionEnabled(false); }; auto btn = ui::Button::create("main_UI_export_10_x4.png", "", "", ui::TextureResType::PLIST); btn->setTitleFontName(menu_font); btn->setTitleFontSize(menu_fontsize); btn->setTitleColor(Color3B::BLACK); btn->getTitleRenderer()->getTexture()->setAliasTexParameters(); btn->setColor(Color3B(114, 160, 72)); btn->getVirtualRenderer()->setScale(sx(1.0f)); btn->setScaleX(sx(1.0f)); btn->setScaleY(sy(1.0f)); param->setMargin(ui::Margin(0, sy(15.0f)*btn->getScaleY(), 0, sy(15.0f)*btn->getScaleY())); btn->setLayoutParameter(param); btn->setTouchEnabled(true); btn->setPressedActionEnabled(true); if (start_disabled) { disable_button(btn); }; btn->setTitleText(text); if (btn_state) { //update the text btn_state->swap_state(btn, btn_state->current); }; btn->addTouchEventListener( [btn_state, cb, btn, disable_button](Ref* ref, ui::Widget::TouchEventType event) { if (event == ui::Widget::TouchEventType::ENDED) { if (!cb()) { disable_button(btn); }; if (btn_state) { btn_state->current = !btn_state->current; btn_state->swap_state(btn, btn_state->current); }; } } ); return btn; };
// on "init" you need to initialize your instance bool LearnScene::init() { if ( !LayerColor::initWithColor(Constants::BACKGROUND_COLOR) ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); // Home btn auto btn = ui::Button::create("HomeBtn", "HomeBtn", "", ui::Widget::TextureResType::PLIST); btn->setAnchorPoint(Vec2::ANCHOR_TOP_RIGHT); btn->setPosition(Vec2(origin.x + visibleSize.width, origin.y + visibleSize.height)); btn->addTouchEventListener(CC_CALLBACK_2(LearnScene::touchEvent, this)); this->addChild(btn, 1, 1); // Learn progress txt float retainedPercent = round(Constants::getRetainedWordCount() * 100 / Constants::getTotalWordCount()); std::stringstream stm; stm << "Learning progress: " << retainedPercent << "%"; auto label = Label::createWithBMFont(Constants::FONT_BOLD12, stm.str()); label->setColor(Color3B::BLACK); label->setAnchorPoint(Vec2::ANCHOR_MIDDLE_LEFT); label->setPosition(origin.x + 14, origin.y + visibleSize.height - 28); this->addChild(label, 2, 2); // Learn progress bar auto sprite9 = ui::Scale9Sprite::createWithSpriteFrameName("PbBg", Rect(2, 2, 2, 2)); sprite9->setContentSize(Size(visibleSize.width - 28, 18)); sprite9->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height - 60)); this->addChild(sprite9, 3, 3); auto pb = ui::Scale9Sprite::createWithSpriteFrameName("PbProgress", Rect(2, 2, 2, 2)); Size pbSize = sprite9->getContentSize(); pbSize.width *= retainedPercent / 100; if(pbSize.width < 6) pbSize.width = 6; pb->setContentSize(pbSize); pb->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT); sprite9->addChild(pb, 1, 1); // Text area sprite9 = ui::Scale9Sprite::createWithSpriteFrameName("TextArea", Rect(12, 12, 12, 12)); sprite9->setContentSize(Size(visibleSize.width-28, visibleSize.height - 264)); sprite9->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height - 86 - sprite9->getContentSize().height / 2)); this->addChild(sprite9, 4, 4); // choices btn = ui::Button::create("ChoiceBg", "ChoiceSelectedBg", "", ui::Widget::TextureResType::PLIST); btn->setScale9Enabled(true); btn->setCapInsets(Rect(5, 5, 5, 5)); btn->setSize(Size(visibleSize.width-28, 30)); btn->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + 148)); btn->getTitleRenderer()->setBMFontFilePath(Constants::FONT_REGULAR12); btn->getTitleRenderer()->setColor(Color3B::BLACK); btn->setTitleText("I know this word."); btn->addTouchEventListener(CC_CALLBACK_2(LearnScene::touchEvent, this)); this->addChild(btn, 5, 5); btn = ui::Button::create("ChoiceBg", "ChoiceSelectedBg", "", ui::Widget::TextureResType::PLIST); btn->setScale9Enabled(true); btn->setCapInsets(Rect(5, 5, 5, 5)); btn->setSize(Size(visibleSize.width-28, 30)); btn->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + 103)); btn->getTitleRenderer()->setBMFontFilePath(Constants::FONT_REGULAR12); btn->getTitleRenderer()->setColor(Color3B::BLACK); btn->setTitleText("Not yet!"); btn->addTouchEventListener(CC_CALLBACK_2(LearnScene::touchEvent, this)); this->addChild(btn, 6, 6); // check btn btn = ui::Button::create("BtnNormal", "BtnPressed", "BtnDisabled", ui::Widget::TextureResType::PLIST); btn->setScale9Enabled(true); btn->setCapInsets(Rect(12, 12, 12, 12)); btn->setSize(Size(visibleSize.width-28, 58)); btn->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + 45)); btn->getTitleRenderer()->setBMFontFilePath(Constants::FONT_BOLD30); btn->setTitleText("Check"); btn->addTouchEventListener(CC_CALLBACK_2(LearnScene::touchEvent, this)); this->addChild(btn, 7, 7); btn->setEnabled(false); btn->setBright(false); // term std::string nextWord = Constants::getNextWordToLearn(); label = Label::createWithBMFont(Constants::FONT_BOLD30, nextWord); label->setColor(Color3B::BLACK); label->setPosition(sprite9->getContentSize().width/2, sprite9->getContentSize().height/2); sprite9->addChild(label, 1, 1); // definition const ValueMap& wInfo = Configuration::getInstance()->getValue("words").asValueMap().at(nextWord).asValueMap(); auto it = wInfo.find("ldef"); std::string ldef = it != wInfo.end() ? it->second.asString() : "Missing definition"; label = Label::createWithBMFont(Constants::FONT_REGULAR14, ldef); label->setColor(Color3B::BLACK); label->setWidth(sprite9->getContentSize().width - 28); label->setAlignment(TextHAlignment::LEFT); label->setPosition(sprite9->getContentSize().width/2, sprite9->getContentSize().height/2); sprite9->addChild(label, 2, 2); label->setOpacity(0); label->setVisible(false); // play sound Constants::playText(nextWord); // init vars this->startTime = time(0); this->showNext = false; this->answerChoice = -1; return true; }
Alert* Alert::create() { //usual cocos create, note that I'm skipping handling errors. should fix that Alert* alert = new (std::nothrow) Alert(); if (alert && alert->init()) { alert->autorelease(); } Size visibleSize = Director::getInstance()->getVisibleSize(); Size node_size = visibleSize*0.80f; alert->setContentSize(node_size); alert->setLayoutType(ui::Layout::Type::RELATIVE); //alert->setBackGroundColor(Color3B::BLACK); //alert->setBackGroundColorOpacity(255/1.5); //alert->setBackGroundColorType(ui::LayoutBackGroundColorType::SOLID); alert->setBackGroundImage("main_UI_export_10_x4.png", TextureResType::PLIST); alert->setBackGroundImageScale9Enabled(true); alert->setBackGroundImageColor(Color3B(114, 160, 72)); //alert->setBackGroundImageOpacity(200.0f); //layout->setClippingEnabled(true); auto create_txt = [&](std::string msg, ui::RelativeLayoutParameter* param) { auto txt = ui::Text::create(msg, DEFAULT_FONT, sx(25.0f)); Label* lbl = (Label*)txt->getVirtualRenderer(); lbl->getFontAtlas()->setAliasTexParameters(); txt->setTextColor(Color4B::BLACK); //txt->enableOutline(Color4B::BLACK, 2); txt->ignoreContentAdaptWithSize(false); //word wrap or something alert->addChild(txt); txt->setLayoutParameter(param); return txt; }; auto header_param = ui::RelativeLayoutParameter::create(); header_param->setRelativeName("header_param"); header_param->setAlign(ui::RelativeAlign::PARENT_TOP_CENTER_HORIZONTAL); header_param->setMargin(ui::Margin(sx(10), sy(30), sx(10), sy(10))); alert->header_txt = create_txt("Title Here", header_param); auto sub_header_param = ui::RelativeLayoutParameter::create(); sub_header_param->setRelativeName("sub_header_param"); sub_header_param->setAlign(ui::RelativeAlign::LOCATION_BELOW_CENTER); sub_header_param->setMargin(ui::Margin(sx(10), sy(10), sx(10), sy(10))); alert->sub_header_txt = create_txt("Sub header", sub_header_param); sub_header_param->setRelativeToWidgetName("header_param"); auto body_param = ui::RelativeLayoutParameter::create(); body_param->setAlign(ui::RelativeAlign::PARENT_LEFT_CENTER_VERTICAL); body_param->setMargin(ui::Margin(sx(30), sy(10), sx(10), sy(10))); alert->body_txt = create_txt("Body content", body_param); Size body_size = alert->body_txt->getAutoRenderSize(); alert->body_txt->setTextAreaSize(Size( body_size.width, body_size.height )); auto close_btn = ui::Button::create(); close_btn->addTouchEventListener([alert](Ref*, TouchEventType type) { if (type == TouchEventType::ENDED) { Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); Vec2 pos = Vec2( origin.x + visibleSize.width - 20, origin.y + 20 ); alert->shrink_close(pos); }; }); close_btn->setTitleText("X"); close_btn->setTitleColor(Color3B::RED); close_btn->setTitleFontSize(sx(40.0f)); close_btn->getTitleRenderer()->enableOutline(Color4B::GRAY, 10); close_btn->setScaleX(sx(1.0f)); close_btn->setScaleY(sy(1.0f)); alert->close_btn = close_btn; ui::RelativeLayoutParameter* close_param = ui::RelativeLayoutParameter::create(); close_param->setAlign(ui::RelativeLayoutParameter::RelativeAlign::PARENT_TOP_RIGHT); close_param->setMargin(ui::Margin(sx(30), sy(20), sx(30), sy(30))); alert->close_btn->setLayoutParameter(close_param); alert->addChild(alert->close_btn); auto done_btn = ui::Button::create(); done_btn->addTouchEventListener([alert](Ref*, TouchEventType type) { if (type == TouchEventType::ENDED) { Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); Vec2 pos = Vec2( origin.x + visibleSize.width - 20, origin.y + 20 ); alert->shrink_close(pos); }; }); done_btn->setScale9Enabled(true); done_btn->loadTextureNormal("main_UI_export_10_scale9_x4.png", ui::TextureResType::PLIST); done_btn->setTitleText("Done"); done_btn->setTitleFontSize(40.0f); done_btn->setTitleFontName(DEFAULT_FONT); auto lbl_size = done_btn->getTitleRenderer()->getContentSize(); done_btn->setContentSize( Size( lbl_size.width * 1.5f, lbl_size.height * 1.5f ) ); done_btn->ignoreContentAdaptWithSize(false); //word wrap or something done_btn->setTitleColor(Color3B::BLACK); done_btn->setScaleX(sx(1.0f)); done_btn->setScaleY(sy(1.0f)); alert->done_btn = done_btn; ui::RelativeLayoutParameter* done_param = ui::RelativeLayoutParameter::create(); done_param->setAlign(ui::RelativeLayoutParameter::RelativeAlign::PARENT_BOTTOM_CENTER_HORIZONTAL); done_param->setMargin(ui::Margin(sx(30), sy(20), sx(30), sy(30))); done_param->setRelativeName("done_btn"); alert->done_btn->setLayoutParameter(done_param); alert->addChild(alert->done_btn); auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouches(true); listener->onTouchBegan = CC_CALLBACK_2(Alert::onTouchBegan, alert); listener->onTouchEnded = CC_CALLBACK_2(Alert::onTouchEnded, alert); Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, alert); return alert; };