#include "GameMenu.h" #include "MainMenuScene.h" #include "MyButton.h" #include "res.h" spGameMenu GameMenu::instance; GameMenu::GameMenu() { //initialize dialog background _bg = initActor(new Box9Sprite, arg_attachTo = _view, arg_resAnim = res::ui.getResAnim("box9"), arg_pos = _view->getSize() / 2 - Vector2(300, 300) / 2); _bg->setGuides(30, 30, 30, 30); //create holder for button and text _buttons = new Actor; _buttons->attachTo(_view); float y = _view->getHeight() / 2 - 80; //initialize TextStyle for TextField //TextStyle is plain struct with "setting" for Text TextStyle style; style.font = res::ui.getResFont("big"); //vertical align style.vAlign = TextStyle::VALIGN_BOTTOM; //horizontal align style.hAlign = TextStyle::HALIGN_CENTER; spTextField paused = initActor(new TextField, arg_style = style, //colored text by "html" tags arg_htmlText = "Paused
!
", arg_x = _view->getWidth() / 2, arg_y = y, arg_attachTo = _buttons, arg_alpha = 128); //animate with infinity loops "Paused!" text paused->addTween(Actor::TweenAlpha(255), 1200, -1, true); paused->addTween(Actor::TweenScale(1.1f), 1200, -1, true); y += 70; //'buttons' image has 2 columns and 5 rows //game actually uses only 2 selected randomly const ResAnim* btns = res::ui.getResAnim("buttons"); //create 2 buttons const char* txt[2] = {"Continue", "Exit"}; for (int i = 0; i < 2; ++i) { //select random frame of image const AnimationFrame& frame = btns->getFrame(rand() % btns->getColumns(), rand() % btns->getRows()); //MyButton is user class inherited from Sprite spMyButton button = initActor(new MyButton, arg_resAnim = frame, arg_anchor = Vector2(0.5f, 0.5f), arg_attachTo = _buttons); button->setX(_view->getWidth() / 2); button->setY(y); button->setText(txt[i]); y += button->getHeight() + 10; button->setName(txt[i]); //handle click on button //each Object could have unique name. In this example button has the same name as text button->addEventListener(TouchEvent::CLICK, CLOSURE(this, &GameMenu::onEvent)); } } void GameMenu::_show() { //before showing dialog hide buttons _buttons->setAlpha(0); //animate background //set default small size _bg->setSize(_bg->getAnimFrame().getSize()); //and modify height and then width by tween spTweenQueue tq = new TweenQueue; tq->add(Actor::TweenHeight(300), 500); tq->add(Actor::TweenWidth(300), 500); //and show buttons when done tq->addDoneCallback(CLOSURE(this, &GameMenu::showButtons)); _bg->addTween(tq); } void GameMenu::showButtons(Event* ev) { //tween activated from GameMenu::_show is done //fade in buttons and text _buttons->addTween(Actor::TweenAlpha(255), 300); } void GameMenu::onEvent(Event* ev) { //button clicked //remember it's name. It would asked later from GameScene.cpp _lastClicked = ev->currentTarget->getName(); //hide dialog hide(); }