bool ResultScene::init(){ if (!Layer::init()){ return false; } auto visibleSize = Director::getInstance()->getVisibleSize(); auto bgimage = Sprite::create("background/dimension-light.png"); this->addChild(bgimage, Z_BACK); bgimage->setPosition(visibleSize / 2); bgimage->setScale(1.3); auto bgimage2 = Sprite::create("background/water.png"); this->addChild(bgimage2, Z_BACK); bgimage2->setPosition(0, visibleSize.height / 2); bgimage2->setAnchorPoint(Vec2(0, 0.5)); bgimage2->setScale(3, 1.3); bgimage2->setBlendFunc(GL_BLEND_SCREENMODE); bgimage2->setOpacity(200); bgimage2->setTag(100); auto tempText = LabelTTF::create("Total money you get: ", "Segoe UI", 36); tempText->setPosition(100, visibleSize.height - 300); tempText->setHorizontalAlignment(TextHAlignment::LEFT); tempText->setVerticalAlignment(TextVAlignment::CENTER); tempText->setAnchorPoint(Vec2(0, 0.5)); tempText->setTag(101); this->addChild(tempText, Z_UI); auto amountPla = LabelTTF::create("Amount of planaria you make: ", "Segoe UI", 36); amountPla->setPosition(tempText->getPositionX(), tempText->getPositionY() - 60); amountPla->setHorizontalAlignment(TextHAlignment::LEFT); amountPla->setVerticalAlignment(TextVAlignment::CENTER); amountPla->setAnchorPoint(Vec2(0, 0.5)); amountPla->setTag(102); this->addChild(amountPla, Z_UI); auto amountDead = LabelTTF::create("Amount of planaria you cut: ", "Segoe UI", 36); amountDead->setPosition(amountPla->getPositionX(), amountPla->getPositionY() - 60); amountDead->setHorizontalAlignment(TextHAlignment::LEFT); amountDead->setVerticalAlignment(TextVAlignment::CENTER); amountDead->setAnchorPoint(Vec2(0, 0.5)); amountDead->setTag(103); this->addChild(amountDead, Z_UI); this->schedule(schedule_selector(ResultScene::Mainloop)); b2Aquarium = Sprite::create("retry.png"); \ b2Aquarium->setAnchorPoint(Vec2::ANCHOR_MIDDLE_BOTTOM); \ b2Aquarium->setPosition(visibleSize.width / 2, 0); \ this->addChild(b2Aquarium); return true; }
static inline Layer* makeItem(string sprite, string text, char code, bool numbered=false) { Layer* l = Layer::create(); Layer* s = Layer::create(); auto sp = MAKESPRITE(sprite); l->addChild(s); s->addChild(sp); s->setPosition(Point(-64, -64)); auto t = makeText(text); s->setTag(1); t->setTag(2); l->addChild(t); auto spriteSize = sp->getContentSize(); auto spriteMidPoint = Point( spriteSize.width * 0.5f, spriteSize.height * 0.5f); sp->setPosition(spriteMidPoint); sp->setTag(0); if (numbered) { auto num = Label::createWithBMFont(MATH_FNT, "--"); sp->addChild(num); num->setHorizontalAlignment(TextHAlignment::CENTER); num->setVerticalAlignment(TextVAlignment::BOTTOM); num->setPosition(Point(32, 34)); } return l; }
static inline Label* makeText(string text, float size=28.0f) { auto lbl = Label::createWithTTF(text, NORMAL_TTF, size); lbl->setPositionX(10); lbl->setAnchorPoint(Point(0, 1)); lbl->setHorizontalAlignment(TextHAlignment::LEFT); lbl->enableShadow(Color4B::BLACK, Size(0.5f, -1.0f), 1); return lbl; }
void Label::setParameter(const String& name, const String& value) { if(name == "caption") this->setCaption(value); else if(name == "autoSizeX") this->setAutoSizeX(value=="true"?true:false); else if(name == "autoSizeY") this->setAutoSizeY(value=="true"?true:false); else if(name == "horizontalAlignment") { if(value == "left") setHorizontalAlignment(HA_LEFT); else if(value == "right") setHorizontalAlignment(HA_RIGHT); else if(value == "center") setHorizontalAlignment(HA_CENTER); else maPanic(0, "MAUI::Label wrong parameter"); } else if(name == "verticalAlignment") { if(value == "top") setVerticalAlignment(VA_TOP); else if(value == "bottom") setVerticalAlignment(VA_BOTTOM); else if(value == "center") setVerticalAlignment(VA_CENTER); else maPanic(0, "MAUI::Label wrong parameter"); } else Widget::setParameter(name, value); }
/*! * Set the text indentation level with the given \a indent. Must be less than or equal to 15. */ void Format::setIndent(int indent) { if (indent && hasProperty(FormatPrivate::P_Alignment_AlignH)) { HorizontalAlignment hl = horizontalAlignment(); if (hl != AlignHGeneral && hl != AlignLeft && hl!= AlignRight && hl!= AlignHJustify) { setHorizontalAlignment(AlignLeft); } } setProperty(FormatPrivate::P_Alignment_Indent, indent, 0); }
/*! * Turn on/off shrink to fit base on \a shink. */ void Format::setShrinkToFit(bool shink) { if (shink && hasProperty(FormatPrivate::P_Alignment_Wrap)) clearProperty(FormatPrivate::P_Alignment_Wrap); if (shink && hasProperty(FormatPrivate::P_Alignment_AlignH)) { HorizontalAlignment hl = horizontalAlignment(); if (hl == AlignHFill || hl == AlignHJustify || hl == AlignHDistributed) setHorizontalAlignment(AlignLeft); } setProperty(FormatPrivate::P_Alignment_ShinkToFit, shink, false); }
void RogueScene::logMessage(const char * pszFormat, ...) { char szBuf[kMaxLogLen+1] = {0}; va_list ap; va_start(ap, pszFormat); vsnprintf(szBuf, kMaxLogLen, pszFormat, ap); va_end(ap); CCLOG("logMessage: %s", szBuf); auto pGameLogNode = getChildByTag(RogueScene::kGameLogTag); // とりあえず子要素がないなら無理 if (!pGameLogNode || pGameLogNode->getChildrenCount() <= 0) { return; } auto pGameLogText = static_cast<LabelTTF*>(pGameLogNode->getChildren().at(0)); // TODO: 1子しかaddしてないから動く。ちゃんとしないと・・・ if (pGameLogText) { // TODO: 別クラスにしてログをlistで保持する。デフォルトの表示は1件だけで、center寄せ表示でいいかと auto pMessage = String::create(szBuf); pMessage->append("\n"); std::string nowString = pGameLogText->getString(); int count = f_r(nowString, '\n'); // 3行まで表示 if (count >= 3) { int size = nowString.size(); unsigned int loc = nowString.find_last_of('\n', size); CCLOG("logMessage: loc = %d size = %d", loc, size); if (loc != std::string::npos) { nowString.erase(loc, nowString.size() - loc); } } pMessage->append(nowString); pGameLogText->setString(pMessage->getCString()); pGameLogText->setVerticalAlignment(cocos2d::TextVAlignment::TOP); pGameLogText->setHorizontalAlignment(cocos2d::TextHAlignment::LEFT); pGameLogText->setPosition(Point(pGameLogText->getFontSize() / 4 + pGameLogText->getContentSize().width / 2, pGameLogNode->getContentSize().height - pGameLogText->getContentSize().height / 2 - pGameLogText->getFontSize() / 4)); } }
int main() { trj::ApplicationConfig config; config.setWindowTitle("Torrijas Template"); trj::main(std::move(config), []() { auto textNode = trj::TextNode::create(); textNode->setFontSize(80); textNode->setFontColor(1, 1, 1); textNode->setHorizontalAlignment(trj::TextNode::HorizontalAlignment::CENTER); textNode->addText(0, 0, "Hi :D"); auto& rootNode = trj::Node::getRootNode(); rootNode.addChild(std::move(textNode)); while(true) { trj::Application::update(); } }); return 0; }
bool HelpScene::init() { if ( !Layer::init() ) { return false; } touched = false; Size visibleSize = Director::getInstance()->getVisibleSize(); //setKeyboardEnabled(true); auto keyboard = EventListenerKeyboard::create(); keyboard->onKeyReleased = CC_CALLBACK_2(HelpScene::onKeyReleased, this); getEventDispatcher()->addEventListenerWithSceneGraphPriority(keyboard, this); //setTouchEnabled(true); auto listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = CC_CALLBACK_2(HelpScene::onTouchBegan, this); listener->onTouchMoved = CC_CALLBACK_2(HelpScene::onTouchMoved, this); listener->onTouchEnded = CC_CALLBACK_2(HelpScene::onTouchEnded, this); getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); addChild(BackgroundWidget::create("bg", Color3B(20, 20, 80))); addChild(Vignette::create()); auto layer = Layer::create(); layer->setTag(1); addChild(layer); auto bg = LayerColor::create(C4Fto4B(0.12f, 0.02f, 0.15f, 1.0f), visibleSize.width, visibleSize.height); bg->setPositionY(PY(0.82f)); addChild(bg); auto hooker = TopAnchor::create(); addChild(hooker, 1); auto pMenu = Menu::create(); pMenu->setPosition(Point::ZERO); //hooker->addChild(bg); hooker->addChild(pMenu); auto txt1 = Label::createWithTTF(LS("HowToPlay"), NORMAL_TTF, 48.0f); txt1->setPosition(VCP(0.22f, 0.935f)); txt1->setAnchorPoint(Point(0, 0.5f)); txt1->setHorizontalAlignment(TextHAlignment::LEFT); txt1->setColor(Color3B::WHITE); hooker->addChild(txt1); //addChild(txt1, 5); auto btnBack = MAKEBUTTON("btnBackBlackUp", "btnBackBlackDn", HelpScene::btnBackPressed); pMenu->addChild(btnBack, 2); btnBack->setPosition(VCP(0.03f, 0.935f)); btnBack->setAnchorPoint(Point(0, 0.5f)); auto playerLayer = makeItem("manRt1", LS("HelpPlayer"), '@'); playerLayer->setPosition(CP(0.2f, 0.80f)); layer->addChild(playerLayer); auto robotLayer = makeItem("robot", LS("HelpRobot"), 'R'); robotLayer->setPosition(CP(0.2f, 0.50f)); robotLayer->SPRITEREF->runAction( RepeatForever::create(Sequence::createWithTwoActions( ScaleTo::create(1.0f, 1.0f), ScaleTo::create(1.0f, 0.9f) ))); layer->addChild(robotLayer); auto holeLayer = makeItem("hazard", LS("HelpBlackhole"), '!'); holeLayer->setPosition(CP(0.2f, 0.10f)); holeLayer->SPRITEREF->runAction(RepeatForever::create(RotateBy::create(2.0f, 365.0f))); holeLayer->SPRITEREF->runAction(RepeatForever::create(Sequence::createWithTwoActions( TintTo::create(0.5f, 210, 255, 255), TintTo::create(0.5f, 255, 0, 0) ))); layer->addChild(holeLayer); auto starLayer = makeItem("dronesGoal", LS("HelpStar"), 'X'); starLayer->setPosition(CP(0.2f, -0.10f)); starLayer->SPRITEREF->runAction(RepeatForever::create(Sequence::createWithTwoActions( TintTo::create(1.0f, 255, 255, 255), TintTo::create(1.0f, 255, 255, 0) ))); starLayer->SPRITEREF->runAction(RepeatForever::create(Sequence::createWithTwoActions( DelayTime::create(10.0f), RotateBy::create(1.0, -360) ))); layer->addChild(starLayer); auto gemLayer = makeItem("gem", LS("HelpGem"), 'g'); gemLayer->setPosition(CP(0.2f, -0.30f)); layer->addChild(gemLayer); auto creditsY = -0.20f; auto creditsLayer3 = makeText(LS("HelpConclusion"), 38.0f); creditsLayer3->setPosition(CP(0.5f, creditsY-0.3f)); creditsLayer3->setHorizontalAlignment(TextHAlignment::CENTER); creditsLayer3->setAnchorPoint(Point(0.5f, 1.0f)); layer->addChild(creditsLayer3); auto facebook = MAKESPRITE("facebook"); facebook->setPosition(CP(0.5f, creditsY - 0.6f)); layer->addChild(facebook); return true; }
bool ActivityView::init() { if (!PopupBaseView::init()) { return false; } setIsHDPanel(true); if (m_obj->type != 6) return false; CCLoadSprite::doResourceByCommonIndex(500, true); CCLoadSprite::doResourceByCommonIndex(502, true); CCLoadSprite::doResourceByCommonIndex(506, true); auto size = CCDirector::sharedDirector()->getWinSize(); this->setContentSize(CCSize(640, 852)); if (CCCommonUtils::isIosAndroidPad()) { this->setContentSize(CCSize(1536, 2048)); } CCBLoadFile("ActivityView", this, this); if (CCCommonUtils::isIosAndroidPad()) { m_bottomNode->setPositionY(m_bottomNode->getPositionY() - (size.height - 2048)); m_listNode->setPositionY(m_listNode->getPositionY() - (size.height - 2048)); m_listNode->setContentSize(CCSize(m_listNode->getContentSize().width, m_listNode->getContentSize().height + size.height - 2048)); } else { m_bottomNode->setPositionY(m_bottomNode->getPositionY() - (size.height - 852)); m_listNode->setPositionY(m_listNode->getPositionY() - (size.height - 852)); m_listNode->setContentSize(CCSize(m_listNode->getContentSize().width, m_listNode->getContentSize().height + size.height - 852)); } if (m_obj->exchange == "1" || m_obj->exchange == "2") { m_bottomNode->setVisible(true); } else { m_bottomNode->setVisible(false); if (CCCommonUtils::isIosAndroidPad()) { m_listNode->setPositionY(m_listNode->getPositionY() - 178); m_listNode->setContentSize(CCSize(m_listNode->getContentSize().width, m_listNode->getContentSize().height + 178)); } else { m_listNode->setPositionY(m_listNode->getPositionY() - 92); m_listNode->setContentSize(CCSize(m_listNode->getContentSize().width, m_listNode->getContentSize().height + 92)); } } m_titleLabel->setString(_lang("150215")); CCCommonUtils::setButtonTitle(m_rwdBtn, _lang("133076").c_str()); Node* node = Node::create(); CCLabelIF* label = nullptr; Sprite* spr = nullptr; float height = 0; { if (!m_obj->rewardIds.empty()) { if (m_obj->showDialogs.size() > 0) { height -= 20; if (CCCommonUtils::isIosAndroidPad()) { height -= 20; } } for (auto it = m_obj->showDialogs.begin(); it != m_obj->showDialogs.end(); ++it) { vector<string> tVec; CCCommonUtils::splitString(*it, ";", tVec); string showStr(""); if (tVec.size() == 1) { showStr = _lang(tVec[0]); } else if (tVec.size() == 2) { showStr = _lang_1(tVec[0].c_str(), (CCCommonUtils::getNameById(tVec[1])).c_str()); } else if (tVec.size() == 3) { showStr = _lang_2(tVec[0].c_str(), (CCCommonUtils::getNameById(tVec[1])).c_str(), (CCCommonUtils::getNameById(tVec[2])).c_str()); } else if (tVec.size() == 4) { showStr = _lang_3(tVec[0].c_str(), (CCCommonUtils::getNameById(tVec[1])).c_str(), (CCCommonUtils::getNameById(tVec[2])).c_str(), (CCCommonUtils::getNameById(tVec[3])).c_str()); } label = CCLabelIF::create(showStr.c_str()); label->setFontSize(20); if (CCCommonUtils::isIosAndroidPad()) { label->setFontSize(40); } label->setColor(ccBLACK); label->setAnchorPoint(Vec2(0.5, 1)); label->setDimensions(Size(580, 0)); if (CCCommonUtils::isIosAndroidPad()) { label->setDimensions(Size(1300, 0)); } label->setHorizontalAlignment(TextHAlignment::CENTER); label->setVerticalAlignment(TextVAlignment::TOP); label->setPosition(Vec2(0, height)); node->addChild(label); height -= label->getContentSize().height * label->getOriginScaleY(); } height -= 5; if (CCCommonUtils::isIosAndroidPad()) { height -= 5; } //有几率获得 label = CCLabelIF::create(_lang("150217").c_str()); label->setFontSize(18); if (CCCommonUtils::isIosAndroidPad()) { label->setFontSize(36); } label->setAnchorPoint(Vec2(0.5, 1)); label->setPosition(Vec2(0, height)); label->setColor({139, 29, 20}); label->setHorizontalAlignment(TextHAlignment::CENTER); label->setVerticalAlignment(TextVAlignment::TOP); node->addChild(label); height -= label->getContentSize().height * label->getOriginScaleY(); //展示奖励 int cnt = m_obj->rewardIds.size(); int hang = ceil(cnt / 6.0); for (int i = 1; i <= hang; ++i) { if (i < hang) { for (int j = 1; j <= 6; ++j) { ActivityRwdShowCell* cell = ActivityRwdShowCell::create(m_obj->rewardIds.at(j - 1 + (i - 1) * 6)); cell->setPositionX(- 80 * 6 / 2 + 80 / 2 + (j - 1) * 80); cell->setPositionY(height - 40); if (CCCommonUtils::isIosAndroidPad()) { cell->setPositionX(- 160 * 6 / 2 + 160 / 2 + (j - 1) * 160); cell->setPositionY(height - 80); } node->addChild(cell); } height -= 80; if (CCCommonUtils::isIosAndroidPad()) { height -= 80; } } else { int leftCnt = cnt - (i - 1) * 6; for (int j = 1; j <= leftCnt; ++j) { ActivityRwdShowCell* cell = ActivityRwdShowCell::create(m_obj->rewardIds.at((i - 1) * 6 + j - 1)); cell->setPositionX(- (80 * leftCnt) / 2 + 80 / 2 + (j - 1) * 80); cell->setPositionY(height - 40); if (CCCommonUtils::isIosAndroidPad()) { cell->setPositionX(- 160 * leftCnt / 2 + 160 / 2 + (j - 1) * 160); cell->setPositionY(height - 80); } node->addChild(cell); } height -= 80; if (CCCommonUtils::isIosAndroidPad()) { height -= 80; } } } //空 height -= 10; if (CCCommonUtils::isIosAndroidPad()) { height -= 10; } //横线 spr = CCLoadSprite::createSprite("Items_tips3_lottery.png"); spr->setAnchorPoint(Vec2(0.5, 0.5)); spr->setPosition(0, height); node->addChild(spr); if (CCCommonUtils::isIosAndroidPad()) { spr->setScale(2); } //空 height -= 10; if (CCCommonUtils::isIosAndroidPad()) { height -= 10; } //剧情简介 label = CCLabelIF::create(_lang("150216").c_str()); label->setAnchorPoint(Vec2(0.5, 1)); label->setColor(ccBLACK); label->setFontSize(20); if (CCCommonUtils::isIosAndroidPad()) { label->setFontSize(40); } label->setPosition(0, height); label->setHorizontalAlignment(TextHAlignment::CENTER); label->setVerticalAlignment(TextVAlignment::TOP); node->addChild(label); height -= label->getContentSize().height * label->getOriginScaleY(); //空 height -= 10; if (CCCommonUtils::isIosAndroidPad()) { height -= 10; } } //正文 string mStory = _lang(m_obj->story); mStory.append("\n\n\n"); label = CCLabelIF::create(mStory.c_str()); label->setFontSize(20); if (CCCommonUtils::isIosAndroidPad()) { label->setFontSize(40); } label->setDimensions(Size(580, 0)); if (CCCommonUtils::isIosAndroidPad()) { label->setDimensions(Size(1300, 0)); } label->setAnchorPoint(Vec2(0.5, 1)); label->setColor({85, 62, 31}); label->setPosition(0, height); label->setHorizontalAlignment(TextHAlignment::CENTER); label->setVerticalAlignment(TextVAlignment::TOP); node->addChild(label); height -= label->getContentSize().height * label->getOriginScaleY(); } ScrollView* view = ScrollView::create(m_listNode->getContentSize()); if (abs(height) < m_listNode->getContentSize().height) { node->setPositionY(m_listNode->getContentSize().height / 2.0 + abs(height) / 2.0); height = -m_listNode->getContentSize().height; } else { node->setPositionY(abs(height)); } view->setContentSize(Size(m_listNode->getContentSize().width, abs(height))); view->addChild(node); node->setPositionX(view->getContentSize().width / 2); // node->setPositionY(abs(height)); view->setContentOffset(Vec2(0, m_listNode->getContentSize().height - view->getContentSize().height)); view->setDirection(ScrollView::Direction::VERTICAL); m_listNode->addChild(view); view->setDelegate(this); bool st = false; if (LuaController::getInstance()->checkActLuaValid(m_obj)) { CCNode* node = LuaController::getInstance()->createActivityAdCell(m_obj); if (node && node->getChildrenCount()) { m_picNode->addChild(node); if (CCCommonUtils::isIosAndroidPad()) { float w = (1536.0 - 1156.0) / 2.0; float h = 645; node->setContentSize(CCSize(0, 0)); node->setScaleX(1156.0 / 640.0); node->setScaleY(645.0 / 357.0); auto layer1 = CCModelLayerColor::create(); layer1->setAnchorPoint(ccp(0, 0)); layer1->setContentSize(CCSize(w, h)); layer1->setPosition(-w, 0); layer1->setOpacity(255); layer1->setColor(ccBLACK); // layer1->setTouchPriority(-999); m_picNode->addChild(layer1); layer1 = CCModelLayerColor::create(); layer1->setAnchorPoint(CCPointZero); layer1->setPosition(ccp(1156, 0)); layer1->setContentSize(CCSize(w, h)); layer1->setOpacity(255); layer1->setColor(ccBLACK); // layer1->setTouchPriority(-999); m_picNode->addChild(layer1); } } else { st = true; } } else { st = true; } if (st) { auto nameTTF = CCLabelIF::create(m_obj->name.c_str()); auto infoTTF = CCLabelIF::create(m_obj->desc.c_str()); auto bgImg = CCLoadSprite::createSprite("activity_ad_beiyong.png"); nameTTF->setPosition(ccp(16,245)); nameTTF->setAnchorPoint(ccp(0, 1)); nameTTF->setFontSize(36); nameTTF->setColor({255,219,117}); nameTTF->setHorizontalAlignment(kCCTextAlignmentLeft); nameTTF->setVerticalAlignment(kCCVerticalTextAlignmentTop); nameTTF->setDimensions(CCSize(0, 0)); infoTTF->setPosition(ccp(16,201)); infoTTF->setAnchorPoint(ccp(0, 1)); infoTTF->setColor({0, 249, 0}); infoTTF->setHorizontalAlignment(kCCTextAlignmentLeft); infoTTF->setVerticalAlignment(kCCVerticalTextAlignmentTop); infoTTF->setDimensions(CCSize(300, 0)); bgImg->setAnchorPoint(ccp(0, 0)); bgImg->setPosition(ccp(0, 0)); auto node = CCNode::create(); node->addChild(bgImg); node->addChild(nameTTF); node->addChild(infoTTF); m_picNode->addChild(node); if (CCCommonUtils::isIosAndroidPad()) { float w = (1536.0 - 1156.0) / 2.0; float h = 645; node->setContentSize(CCSize(0, 0)); node->setScaleX(1156.0 / 640.0); node->setScaleY(645.0 / 357.0); auto layer1 = CCModelLayerColor::create(); layer1->setAnchorPoint(ccp(0, 0)); layer1->setContentSize(CCSize(w, h)); layer1->setPosition(-w, 0); layer1->setOpacity(255); layer1->setColor(ccBLACK); // layer1->setTouchPriority(-999); m_picNode->addChild(layer1); layer1 = CCModelLayerColor::create(); layer1->setAnchorPoint(CCPointZero); layer1->setPosition(ccp(1156, 0)); layer1->setContentSize(CCSize(w, h)); layer1->setOpacity(255); layer1->setColor(ccBLACK); // layer1->setTouchPriority(-999); m_picNode->addChild(layer1); } } if (m_obj->exchange == "2") { if (ActivityController::getInstance()->m_exc2Data.find(m_obj->id) == ActivityController::getInstance()->m_exc2Data.end()) { ActivityController::getInstance()->startGetAct6Data(); } else { if (!ActivityController::getInstance()->checkIsToday(ActivityController::getInstance()->m_exc2RefInfo[m_obj->id].m_refreshTime)) { ActivityController::getInstance()->m_exc2RefInfo[m_obj->id].m_refreshTime = GlobalData::shared()->getTimeStamp(); ActivityController::getInstance()->m_exc2RefInfo[m_obj->id].m_refresh = 0; } } } else if (m_obj->exchange == "1") { if (!ActivityController::getInstance()->isAct1DataInit(m_obj->id)) { ActivityController::getInstance()->startGetAct6Data(); } else { ActivityController::getInstance()->checkAct1ReFreshTimes(m_obj->id); // if (ActivityController::getInstance()->isAct1DataShouldRefresh(m_obj->id)) // { // ActivityController::getInstance()->startAct6Refresh(m_obj->id); // } } } return true; }
bool ItemWindowLayer::initWithContentSize(Size contentSize) { if (!LayerColor::init()) { return false; } setContentSize(contentSize); int padding = 2; // アイテム一覧レイヤー(左側) std::list<std::string> itemNameList; for (DropItemSprite::DropItemDto dropItem : m_itemDtoList) { itemNameList.push_back(dropItem.name); } auto pItemListLayer = TableViewTestLayer::createWithTextArray(itemNameList, Size(contentSize.width / 2, contentSize.height)); pItemListLayer->setColor(Color3B::BLACK); pItemListLayer->setOpacity(128); pItemListLayer->setPosition(Point( contentSize.width / 2 - pItemListLayer->getContentSize().width - padding, contentSize.height / 2 - pItemListLayer->getContentSize().height / 2)); pItemListLayer->setCallback([this](Object* pObject, long touchedIdx) { // 行選択時 CCLOG(" touched idx = %ld", touchedIdx); // 同じ行連打は無視 if (m_showItemDetailIdx == touchedIdx) { return; } // touched DropItemDto auto it = m_itemDtoList.begin(); std::advance(it, touchedIdx); auto dropItemDto = (DropItemSprite::DropItemDto) *it; this->setItemDetail(&dropItemDto); // 表示indexを更新 m_showItemDetailIdx = touchedIdx; }); pItemListLayer->setTag(ItemWindowLayer::ItemTableLayerTag); this->addChild(pItemListLayer); // アイテム詳細レイヤー(右側) auto pItemDetailLayer = LayerColor::create(); pItemDetailLayer->setColor(Color3B::BLACK); pItemDetailLayer->setOpacity(128); pItemDetailLayer->setContentSize(Size(contentSize.width / 2, contentSize.height)); pItemDetailLayer->setPosition(Point(contentSize.width / 2 + padding, 0)); pItemDetailLayer->setTag(ItemDetailLayerTag); // アイテム名 auto pItemNameTitleLabel = LabelTTF::create("なまえ", GAME_FONT(16), 16); pItemNameTitleLabel->setColor(Color3B::WHITE); pItemNameTitleLabel->setVerticalAlignment(cocos2d::TextVAlignment::TOP); pItemNameTitleLabel->setHorizontalAlignment(cocos2d::TextHAlignment::LEFT); pItemNameTitleLabel->setPosition(Point( pItemNameTitleLabel->getContentSize().width / 2 + pItemNameTitleLabel->getFontSize() / 2, pItemDetailLayer->getContentSize().height - pItemNameTitleLabel->getContentSize().height / 2 - pItemNameTitleLabel->getFontSize() / 2)); pItemDetailLayer->addChild(pItemNameTitleLabel); auto pItemNameLabel = LabelTTF::create(ITEM_LAYER_NAME_DEFAULT, GAME_FONT(10), 10); pItemNameLabel->setColor(Color3B::WHITE); pItemNameLabel->setPosition(Point( pItemDetailLayer->getContentSize().width * 0.5, pItemDetailLayer->getContentSize().height * 0.75)); pItemNameLabel->setTag(ItemWindowLayer::ItemNameTag); pItemDetailLayer->addChild(pItemNameLabel); // アイテム説明 auto pItemDetailTitleLabel = LabelTTF::create("せつめい", GAME_FONT(16), 16); pItemDetailTitleLabel->setColor(Color3B::WHITE); pItemDetailTitleLabel->setVerticalAlignment(cocos2d::TextVAlignment::TOP); pItemDetailTitleLabel->setHorizontalAlignment(cocos2d::TextHAlignment::LEFT); pItemDetailTitleLabel->setPosition(Point( pItemDetailTitleLabel->getContentSize().width / 2 + pItemDetailTitleLabel->getFontSize() / 2, pItemDetailLayer->getContentSize().height / 2 - pItemDetailTitleLabel->getContentSize().height / 2 - pItemDetailTitleLabel->getFontSize() / 2)); pItemDetailLayer->addChild(pItemDetailTitleLabel); auto pItemDetailLabel = LabelTTF::create(ITEM_LAYER_DETAIL_DEFAULT, GAME_FONT(10), 10); pItemDetailLabel->setColor(Color3B::WHITE); pItemDetailLabel->setPosition(Point( pItemDetailLayer->getContentSize().width * 0.5, pItemDetailLayer->getContentSize().height * 0.25)); pItemDetailLabel->setTag(ItemWindowLayer::ItemDetailTag); pItemDetailLayer->addChild(pItemDetailLabel); // ----------------------------- // メニューボタン float addNextMenuPositonX = 8; // 捨てるボタン auto pMenuItemDrop = ItemWindowLayer::createMenuItemSprite(Color3B::RED, [this](Object* pSeneder) { // hoge CCLOG("item drop menu pressed"); if (m_showItemDetailIdx < 0) { return; } if (m_itemDropMenuCallback) { auto it = m_itemDtoList.begin(); std::advance(it, m_showItemDetailIdx); auto dropItemDto = (DropItemSprite::DropItemDto) *it; // 削除 m_itemDtoList.erase(it); m_itemDropMenuCallback(pSeneder, dropItemDto); } }); pMenuItemDrop->setPosition(Point(pMenuItemDrop->getContentSize().width / 2 + addNextMenuPositonX , pMenuItemDrop->getContentSize().height / 2)); addNextMenuPositonX += pMenuItemDrop->getContentSize().width + 8; // 使用ボタン auto pMenuItemUse = ItemWindowLayer::createMenuItemSprite(Color3B::GRAY, [this](Object* pSeneder) { // hoge CCLOG("item use menu pressed"); if (m_showItemDetailIdx < 0) { return; } if (m_itemUseMenuCallback) { auto it = m_itemDtoList.begin(); std::advance(it, m_showItemDetailIdx); auto dropItemDto = (DropItemSprite::DropItemDto) *it; // 削除 m_itemDtoList.erase(it); m_itemUseMenuCallback(pSeneder, dropItemDto); } }); pMenuItemUse->setPosition(Point(pMenuItemDrop->getContentSize().width / 2 + addNextMenuPositonX, pMenuItemDrop->getContentSize().height / 2)); addNextMenuPositonX += pMenuItemUse->getContentSize().width + 8; auto pMenu = Menu::create(pMenuItemDrop, pMenuItemUse, NULL); pMenu->setPosition(Point::ZERO); pItemDetailLayer->addChild(pMenu); this->addChild(pItemDetailLayer); return true; }
bool EpisodeLockedScene::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); addChild(BackgroundWidget::create("bg" + nToString(GameSettings::CurrentEpisode), Color3B(200, 200, 200))); addChild(Vignette::create()); auto hole = MAKESPRITE("blackholebig"); addChild(hole); hole->setPosition(CP(0.5f, 0.65f)); hole->setScale(0.8f); hole->runAction(RepeatForever::create(RotateBy::create(40.0, 365))); auto gamelogo = MAKESPRITE("gamelogo"); addChild(gamelogo); gamelogo->setPosition(CP(0.5f, 0.65f)); gamelogo->setScale(0.8f); gamelogo->runAction(RepeatForever::create(Sequence::createWithTwoActions( ScaleTo::create(3.0f, 0.81f), ScaleTo::create(3.0f, 0.79f) ))); string title = LS(EpisodeInfos[GameSettings::CurrentEpisode].title); int price = EpisodeInfos[GameSettings::CurrentEpisode].price; auto hooker = TopAnchor::create(); addChild(hooker, 1); auto hookerMenu = Menu::create(); hookerMenu->setPosition(Point::ZERO); hooker->addChild(hookerMenu); #if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID) auto btnMenu = MAKEBUTTON("btnBackUp", "btnBackDn", EpisodeLockedScene::menuCloseCallback); btnMenu->setPosition(VCP(0.03f, 0.95f)); btnMenu->setAnchorPoint(Point(0, 1.0f)); btnMenu->setScale(1.3f); hookerMenu->addChild(btnMenu); #endif auto pMenu = Menu::create(); pMenu->setPosition(Point::ZERO); addChild(pMenu, 1); auto episodetext = Label::createWithTTF(LS("Episode") + " " + nToString(GameSettings::CurrentEpisode + 1), FANCY_TTF, 50.0f); episodetext->setHorizontalAlignment(TextHAlignment::CENTER); episodetext->setPosition(VCP(0.5f, 0.45f)); addChild(episodetext); auto episodetitle = Label::createWithTTF(title, FANCY_TTF, 60.0f); episodetitle->setHorizontalAlignment(TextHAlignment::CENTER); episodetitle->setPosition(VCP(0.5f, 0.38f)); addChild(episodetitle); string unlocktextstring = LS("UnlockEpisodeMessageWithProgress"); auto unlocktext = Label::createWithTTF(string_format(unlocktextstring, price), FANCY_TTF, 38.0f); unlocktext->setHorizontalAlignment(TextHAlignment::CENTER); unlocktext->setPosition(VCP(0.5f, 0.25f)); addChild(unlocktext); auto keyboard = EventListenerKeyboard::create(); keyboard->onKeyReleased = CC_CALLBACK_2(EpisodeLockedScene::onKeyReleased, this); getEventDispatcher()->addEventListenerWithSceneGraphPriority(keyboard, this); return true; }
void ComsumeController::initGame() { char message[100]; Size winSize = Director::getInstance()->getVisibleSize(); auto _bg2 = LayerColor::create(Color4B(0,128,128,128), winSize.width, winSize.height); this->addChild(_bg2); _doorStatus = 0; switch (com_attend_type) { case 1: _sprite1 = Sprite::create("sts/sentakumono.png"); break; case 2: _sprite1 = Sprite::create("sts/jiko_jishin_himoto.png"); break; case 3: _sprite1 = Sprite::create("sts/mizumore_toilet.png"); break; case 4: _sprite1 = Sprite::create("sts/jiko_mizumore.png"); break; default: _sprite1 = Sprite::create("sts/sentakumono.png"); break; } _sprite1->setScale(2.0f); _sprite1->setPosition(Vec2(winSize.width/2, winSize.height/2)); addChild(_sprite1); //Scrollview auto *scroll = ScrollView::create(winSize); // 縦方向だけにスクロール scroll->setDirection(ScrollView::Direction::VERTICAL); addChild(scroll); com_text_ext = Replace1( com_text_ext, ",", "\n" ); if (com_text_ext.size()==0) { com_text_ext = "電力消費量の予測"; } com_text_ext = com_text_ext + "\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + com_attend_ext; auto label = LabelTTF::create(com_text_ext, "Arial Rounded MT Bold", 36); label->setColor(Color3B::WHITE); // 文字の開始位置を画面の上に合わせる // 文字データは、一番左上から表示させたいので、widthは0 // heightはコンテンツサイズから画面縦を引いた負数にする label->setDimensions(Size(winSize.width,0)); label->setDimensions (Size(label->getContentSize().width, label->getContentSize().height)); // 左寄せにする label->setHorizontalAlignment(TextHAlignment::LEFT); // スクロールされるラベルの調整 scroll->setContainer(label); scroll->setContentOffset (Point(0, 0 - (label->getContentSize().height - winSize.height))); //update関数の呼び出しを開始 scheduleUpdate(); }
void EstateController::initGame(int type) { initGame_type = type; Size winSize = Director::getInstance()->getVisibleSize(); getEstateInfoContent(); auto _bg2 = LayerColor::create(Color4B(0,255,0,128), winSize.width, winSize.height); this->addChild(_bg2); std::string wording; std::vector<std::string> files; switch (type) { case 1: wording = "住宅相談"; user_status = BUILD_SHOHIN_CONSULT; files.push_back("res/iecoram.png"); files.push_back("res/ad.png"); showButton1(files); break; case 2: wording = "リフォームに関するプロに出会えるおすすめ情報です"; user_status = BASIC_REFORM_FLOW; files.push_back("res/inspection.png"); files.push_back("res/mentschedule.png"); files.push_back("res/refflow.png"); files.push_back("res/refquestion.png"); showButton1(files); break; case 3: wording = "賃貸住宅D-Room"; user_status = RENT_HOUSE; files.push_back("res/d-room.png"); files.push_back("res/d-roomlife.png"); files.push_back("res/d-room-clum.png"); showButton1(files); break; case 4: wording = "住宅相談(機能面)"; user_status = REGIST_KENCHIKU_CONSULT; files.push_back("res/childhouse.png"); files.push_back("res/forwoman.png"); files.push_back("res/hiraya.png"); files.push_back("res/hospitakhouse.png"); files.push_back("res/kitchen.png"); files.push_back("res/makeplus.png"); files.push_back("res/parahouse.png"); files.push_back("res/pethouse.png"); files.push_back("res/powerfulsolor.png"); files.push_back("res/proofsound.png"); files.push_back("res/renthouse.png"); files.push_back("res/rentmayhome.png"); files.push_back("res/shunou.png"); files.push_back("res/smarteco.png"); files.push_back("res/taiyodiscount.png"); files.push_back("res/toshinaka.png"); showButton1(files); break; case 5: wording = "住宅リフォーム(機能面)"; user_status = KEEP_LIVING_BUILDING; files.push_back("res/genkan.png"); files.push_back("res/kabe.png"); files.push_back("res/washitu.png"); files.push_back("res/proof.png"); files.push_back("res/living.png"); files.push_back("res/toilet.png"); files.push_back("res/kitchen-ref.png"); files.push_back("res/bathroom.png"); showButton1(files); break; case 6: wording = "住宅リフォーム(金額面)"; user_status = KEEP_PROCE100_BUILDING; files.push_back("res/ref-under100.png"); files.push_back("res/ref-100-200.png"); files.push_back("res/ref-over200.png"); files.push_back("res/ref-300-500.png"); files.push_back("res/ref-500-1000.png"); files.push_back("res/ad.png"); showButton1(files); break; default: break; } //Scrollview auto *scroll = ScrollView::create(winSize); // 縦方向だけにスクロール scroll->setDirection(ScrollView::Direction::VERTICAL); addChild(scroll); auto labelcont = LabelTTF::create(wording, "Arial Rounded MT Bold", 36); labelcont->setColor(Color3B::WHITE); labelcont->setDimensions(Size(winSize.width,0)); labelcont->setDimensions(Size(labelcont->getContentSize().width, labelcont->getContentSize().height)); labelcont->setHorizontalAlignment(TextHAlignment::LEFT); // スクロールされるラベルの調整 scroll->setContainer(labelcont); scroll->setContentOffset(Point(0, 0 - (labelcont->getContentSize().height - winSize.height))); //update関数の呼び出しを開始 scheduleUpdate(); }
TableViewCell* Ranking::tableCellAtIndex(TableView *table, ssize_t idx) { RankingData *rankingData = _rankingData.at(idx); table->setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN); TableViewCell *cell = table->dequeueCell(); if (!cell) { cell = new TableViewCell(); cell->autorelease(); } cell->removeAllChildren(); auto colorLayer = LayerColor::create(); colorLayer->setAnchorPoint(Point::ZERO); colorLayer->setContentSize(Size(_tableViewRanking->getBoundingBox().size.width, TableViewItemHeightValue.asFloat())); colorLayer->setPosition(Vec2(0 * _tableViewRanking->getBoundingBox().size.width, 0)); cell->addChild(colorLayer); string numberRanking; ostringstream convert2; convert2 << idx + 1; numberRanking = convert2.str(); auto padding = 25; auto number = Label::createWithTTF(numberRanking, MainRegularFont, 60); number->setContentSize(Size(_tableViewRanking->getBoundingBox().size.width / _totalLabels - padding, TableViewItemHeightValue.asFloat())); number->setWidth(_tableViewRanking->getBoundingBox().size.width / _totalLabels); number->setHeight(TableViewItemHeightValue.asFloat()); number->setVerticalAlignment(TextVAlignment::CENTER); number->setHorizontalAlignment(TextHAlignment::LEFT); number->setAnchorPoint(Point::ZERO); if (idx == 0) { number->setTextColor(IkasPurple); } else { number->setTextColor(IkasPurpleLight); } number->setPosition(Vec2(0 * _tableViewRanking->getBoundingBox().size.width + padding/ _totalLabels, 0)); cell->addChild(number); auto name = Label::createWithTTF(rankingData->getuser(), MainRegularFont, 60); name->setContentSize(Size(_tableViewRanking->getBoundingBox().size.width / _totalLabels, TableViewItemHeightValue.asFloat())); name->setWidth(_tableViewRanking->getBoundingBox().size.width / _totalLabels); name->setHeight(TableViewItemHeightValue.asFloat()); name->setVerticalAlignment(TextVAlignment::CENTER); name->setHorizontalAlignment(TextHAlignment::CENTER); name->setAnchorPoint(Point::ZERO); if (idx == 0) { name->setTextColor(IkasPurple); } else { name->setTextColor(IkasPurpleLight); } name->setPosition(Vec2(0 * _tableViewRanking->getBoundingBox().size.width / _totalLabels, 0)); cell->addChild(name); string points; ostringstream convert; convert << rankingData->getpoints(); points = convert.str(); auto pointsLabel = Label::createWithTTF(points, MainRegularFont, 60); pointsLabel->setContentSize(Size(_tableViewRanking->getBoundingBox().size.width / _totalLabels, TableViewItemHeightValue.asFloat())); pointsLabel->setHeight(TableViewItemHeightValue.asFloat()); pointsLabel->setWidth(_tableViewRanking->getBoundingBox().size.width / _totalLabels); pointsLabel->setVerticalAlignment(TextVAlignment::CENTER); pointsLabel->setHorizontalAlignment(TextHAlignment::CENTER); pointsLabel->setAnchorPoint(Point::ZERO); if (idx == 0) { pointsLabel->setTextColor(IkasPurple); } else { pointsLabel->setTextColor(IkasPurpleLight); } pointsLabel->setPosition(Vec2(1 * _tableViewRanking->getBoundingBox().size.width / _totalLabels, 0)); cell->addChild(pointsLabel); // // if (idx % 2 == 0) { // number->setTextColor(IkasWhite); // name->setTextColor(IkasWhite); // pointsLabel->setTextColor(IkasWhite); // colorLayer->setColor(Color3B(IkasRed)); // colorLayer->setOpacity(60); // } else { // number->setTextColor(IkasRed); // name->setTextColor(IkasRed); // pointsLabel->setTextColor(IkasRed); // colorLayer->setColor(Color3B(IkasWhite)); // colorLayer->setOpacity(0); // } LayerColor *topSeparator; if (idx % 2 == 0) { topSeparator = LayerColor::create(IkasPurpleLight); } else { topSeparator = LayerColor::create(IkasPurpleLightAlpha); } topSeparator->setContentSize(Size(_tableViewRanking->getBoundingBox().size.width, 2)); topSeparator->setPosition(Vec2(0, TableViewItemHeightValue.asFloat() - 4)); topSeparator->setAnchorPoint(Point::ANCHOR_BOTTOM_LEFT); cell->addChild(topSeparator); if (idx == _rankingData.size() - 1) { if (idx % 2 != 0) { topSeparator = LayerColor::create(IkasPurpleLight); } else { topSeparator = LayerColor::create(IkasPurpleLightAlpha); } topSeparator->setContentSize(Size(_tableViewRanking->getBoundingBox().size.width, 2)); topSeparator->setPosition(Vec2(0, 0)); topSeparator->setAnchorPoint(Point::ANCHOR_BOTTOM_LEFT); cell->addChild(topSeparator); } return cell; }
// on "init" you need to initialize your instance bool ChooserScene::init(int _offset) { offset = _offset; ////////////////////////////// // 1. super init first if (!Layer::init()) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); string title = vector < string > { "Moon", "Mars", "Uranus" }[GameSettings::CurrentEpisode]; auto hooker = TopAnchor::create(); addChild(hooker, 1); auto episodetitle = Label::createWithTTF(title, FANCY_TTF, 60.0f); episodetitle->setHorizontalAlignment(TextHAlignment::CENTER); episodetitle->setPosition(VCP(0.5f, 0.9f)); hooker->addChild(episodetitle); auto pMenu = Menu::create(); pMenu->setPosition(Point::ZERO); hooker->addChild(pMenu, 1); auto btnMenu = MAKEBUTTON("btnMenuUp", "btnMenuDn", ChooserScene::btnMenuPressed); btnMenu->setPosition(VCP(0, 1)); btnMenu->setAnchorPoint(Point(-0.5, 1.5)); btnMenu->setScale(1.3f); pMenu->addChild(btnMenu); auto pLevels = Menu::create(); pLevels->setPosition(Point::ZERO); pLevels->setTag(0); hooker->addChild(pLevels); const float startX = 0.2f; const float startY = 0.25f; auto bSprite = Sprite::createWithSpriteFrameName("circle"); auto contentsize = bSprite->getContentSize(); float off = 1.0f - (2.0f * startX); off /= (float) (lCount - 1); float offy = 1.0f - (startY * 2.0f); offy /= (float) (rCount - 1); log("Unlocked Level ID:" + nToString(GameSettings::GetUnlockedLevelId())); float y = startY; GLubyte cR = 255; for (int r = 0; r < rCount; r++) { float x = startX; GLubyte cG = 200; // static_cast<GLubyte>(200.0f * (float) offset / (float) GameSettings::MaximumLevelId); GLubyte cB = 20; // +200 - static_cast<GLubyte>(200.0f * (float) offset / (float) GameSettings::MaximumLevelId);; for (int i = 0; i < lCount; i++) { int levelId = offset + (rCount - (r + 1)) * lCount + i; if (levelId >= GameSettings::GetMaximumLevelId()) break; Node* btn; if (levelId <= GameSettings::GetUnlockedLevelId()) { btn = MAKEBUTTON("circle", "circleDn", ChooserScene::btnLevelPressed); btn->setTag(100 + levelId); pLevels->addChild(btn); blobs.push_back(btn); btn->setPosition(VCP(x, y)); Label* lbl = Label::createWithSystemFont(nToString(levelId + 1).c_str(), "Consolas", 28.0); lbl->setColor(Color3B::WHITE); lbl->setPosition(VCP(x, y)); numbers.push_back(lbl); this->addChild(lbl, 1); btn->setColor(Color3B(cR, cG, cB)); } else { btn = Sprite::createWithSpriteFrameName("circleLk"); btn->setTag(100 + levelId); hooker->addChild(btn); blobs.push_back(btn); btn->setPosition(VCP(x, y)); } btn->setScale(0.8f); #if ENABLE_IAD //btn->setScale(0.8f); #endif cG *= 0.5; cB *= 1.7; cB = cB > 255 ? 255 : cB; x += off; } cR *= 0.7; y += offy; } if (offset > 0) { auto backBtn = MAKEBUTTON("btnBackUp", "btnBackDn", btnBackPressed); backBtn->setPosition(CP(0.1f, 0.1f)); backBtn->setScale(1.3f); pMenu->addChild(backBtn); } if (offset + lCount * rCount < GameSettings::GetMaximumLevelId()) { auto nextBtn = MAKEBUTTON("btnNextUp", "btnNextDn", btnNextPressed); nextBtn->setPosition(CP(0.9f, 0.1f)); nextBtn->setScale(1.3f); pMenu->addChild(nextBtn); } schedule(schedule_selector(ChooserScene::bloop), 2.0f, kRepeatForever, 4.0f); auto keyboard = EventListenerKeyboard::create(); keyboard->onKeyReleased = CC_CALLBACK_2(ChooserScene::onKeyReleased, this); getEventDispatcher()->addEventListenerWithSceneGraphPriority(keyboard, this); return true; }
// on "init" you need to initialize your instance bool RelayGameLayer::init() { ////////////////////////////// // 1. super init first if (!GridLayer::init()) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); _SetDefaultValues(); //----------------------------------------------------- // 背景 auto spriteBack = Sprite::create("MainBackAll.png"); if(spriteBack) { // add "canvas" splash screen" spriteBack->setScale( this->getContentSize().width / spriteBack->getContentSize().width, this->getContentSize().height / spriteBack->getContentSize().height); // position the sprite on the center of the screen spriteBack->setPosition( origin.x + visibleSize.width / 2.f + origin.x, origin.y + visibleSize.height / 2.f + origin.y); spriteBack->setName("Back"); // add the sprite as a child to this layer this->addChild(spriteBack, ZOrder::BACK); } //----------------------------------------------------- // キャンバス auto layerCanvas = LayerCanvas::create(); if (layerCanvas && layerCanvas->createSprite("canvas.png")) { this->addChild(layerCanvas, ZOrder::CANVAS, "Canvas"); layerCanvas->setPosition( origin + visibleSize / 2.f ); layerCanvas->setVisible(false); } //----------------------------------------------------- // テーマ発表用 auto spriteBoard = Sprite::create("BigBoard.png"); if (spriteBoard) { spriteBoard->setPosition( origin + visibleSize/ 2.f ); spriteBack->setVisible(true); // 非表示 this->addChild(spriteBoard, ZOrder::BIGBOARD, "BigBoard"); auto size = spriteBoard->getContentSize(); // 表示ラベル設定 余白 x:90*y:60 // 上 auto labelTop = Label::createWithSystemFont("描く順番と解答者の発表です", "GenShinGothic-Regular.ttf", calcFontSize(40.f)); if (labelTop) { // 中央揃え上揃え labelTop->setAlignment(TextHAlignment::CENTER, TextVAlignment::TOP); labelTop->setPosition( size.width / 2.f, size.height - labelTop->getContentSize().height/2.f - 60.f ); spriteBoard->addChild(labelTop, 0, "TopLabel"); } // 中央 auto labelMiddle = Label::createWithSystemFont("", "GenShinGothic-Medium.ttf", calcFontSize(80.f)); labelMiddle->setName("MiddleLabel"); auto itemLabel = MenuItemLabel::create(labelMiddle, [this](Ref* pSender){ // 検索窓開く std::stringstream url; url << "https://www.google.co.jp/search?tbm=isch&q=" << m_nowTheme.theme; Application::getInstance()->openURL(url.str().c_str()); }); if (itemLabel) { m_pMiddleLabel = itemLabel; // 始めのうちは反応なし m_pMiddleLabel->setEnabled(false); // 中央揃え中央揃え labelMiddle->setAlignment(TextHAlignment::CENTER, TextVAlignment::BOTTOM); labelMiddle->setColor(Color3B(250, 210, 10)); m_pMiddleLabel->setColor(Color3B(250, 210, 10)); labelMiddle->setDimensions(size.width - 90, 0); m_pMiddleLabel->setName("ItemMiddleLabel"); auto menu = Menu::create(m_pMiddleLabel, nullptr); menu->setPosition( size / 2.f ); spriteBoard->addChild(menu, 0, "MenuMiddleLabel"); } // 下 auto labelBottom = Label::createWithSystemFont("1人目の人から順に\n画面をタッチしてください", "GenShinGothic-Regular.ttf", calcFontSize(37.f)); if (labelBottom) { // 中央揃え下揃え labelBottom->setAlignment(TextHAlignment::CENTER, TextVAlignment::BOTTOM); labelBottom->setAnchorPoint(Vec2(0.5f, 0.0f)); labelBottom->setPosition( size.width / 2.f, labelBottom->getContentSize().height / 2.f + 60.f ); spriteBoard->addChild(labelBottom, 0, "BottomLabel"); } } //----------------------------------------------------- // ラベル用 auto spriteSmallBoard = Sprite::create("board.png"); if (spriteSmallBoard) { spriteSmallBoard->setPosition( origin.x + visibleSize.width / 2.f, origin.y + visibleSize.height - spriteSmallBoard->getContentSize().height / 2.f ); this->addChild(spriteSmallBoard, ZOrder::TOPBOARD, "SmallBoard"); } //----------------------------------------------------- // ラベル設定 // アナウンス auto label = Label::createWithSystemFont(" ", "GenShinGothic-Medium.ttf", calcFontSize(30.f)); { label->setColor(Color3B(250, 250, 250)); // 白文字 label->enableOutline(Color4B::BLACK, 3); // 黒枠線 label->setHorizontalAlignment(TextHAlignment::CENTER); spriteSmallBoard->addChild(label, 10, "Label"); label->setPosition(spriteSmallBoard->getAnchorPointInPoints()); m_pLabel = label; // キャッシュ } //----------------------------------------------------- //----------------------------------------------------- // ボタン auto nextButton = MenuItemImage::create("button.png", "button2.png", [this](Ref* pSender) { if (FlowPhase::ANSWERED == m_flowPhase) { // タイトルへ dynamic_cast<SceneAtelierMain*>(this->getParent()->getParent())->toTitle(); } else { // 全消去 m_touchPoints[m_nowPage].clear(); m_pDrawNode->clear(); } }); if (nextButton) { m_pNextButton = nextButton; nextButton->setName("NextButton"); // ボタン非表示 //nextButton->setVisible(false); auto size = nextButton->getContentSize(); nextButton->setPosition( origin.x + visibleSize.width - size.width / 2.f, origin.y + size.height / 2.f); auto label = Label::createWithSystemFont("全消去", "GenShinGothic-Medium.ttf", calcFontSize(20.f)); if (label) { m_pButtonLabel = label; label->setPosition(nextButton->getContentSize() / 2.f); label->setHorizontalAlignment(TextHAlignment::CENTER); // ラベル非表示 //label->setVisible(false); label->setColor(Color3B(5, 5, 5)); nextButton->addChild(label, ZOrder::NEXTBUTTONLABEL, "ButtonLabel"); } } auto menuButtons = Menu::create(nextButton, nullptr); if (menuButtons) { menuButtons->setPosition(Vec2::ZERO); menuButtons->setVisible(false); this->addChild(menuButtons, ZOrder::MENUBUTTONS, "MenuButtons"); } //----------------------------------------------------- // 前後ボタン // 前 auto itemBack = MenuItemImage::create("BackButton.png", "BackButton2.png", [this](Ref* pSender){ auto button = dynamic_cast<MenuItemImage*>(pSender); if (0 < m_nowPage) { // 戻るよ! auto oldCanvas = this->getChildByName("Canvas"); if (!oldCanvas) oldCanvas = this->getChildByName("Canvas" + std::to_string(m_nowPage)); --m_nowPage; std::stringstream ss; ss << "Canvas" << m_nowPage; auto layerCanvas = this->getChildByName(ss.str()); layerCanvas->setLocalZOrder(oldCanvas->getLocalZOrder() + 1); auto drawNode = layerCanvas->getChildByName<DrawNode*>("DrawNode"); layerCanvas->setVisible(true); layerCanvas->runAction( Sequence::create( ReverseTime::create(PageTurn3D::create(0.5f, Size(24.f, 32.f))), CallFunc::create([this, layerCanvas, drawNode](){ // キャンバスの入れ替え //-------------------------- // DrawNode入れ替え m_pDrawNode = drawNode; //-------------------------- }), nullptr ) ); if (0 == m_nowPage) { // もう戻れないよ! button->setVisible(false); } button->getParent()->getChildByName("LastNextButton")->setVisible(true); } }); { itemBack->setName("LastBackButton"); } auto itemNext = MenuItemImage::create("NextButton.png", "NextButton2.png", [this](Ref* pSender){ auto button = dynamic_cast<MenuItemImage*>(pSender); const auto maxPage = m_touchPoints.size() - 1; if (maxPage > m_nowPage) { // 進むよ! auto oldCanvas = this->getChildByName("Canvas"); if (!oldCanvas) oldCanvas = this->getChildByName("Canvas" + std::to_string(m_nowPage)); ++m_nowPage; std::stringstream ss; ss << "Canvas" << m_nowPage; auto layerCanvas = this->getChildByName(ss.str()); layerCanvas->setLocalZOrder(oldCanvas->getLocalZOrder() - 1); auto drawNode = layerCanvas->getChildByName<DrawNode*>("DrawNode"); layerCanvas->setVisible(true); oldCanvas->runAction( Sequence::create( PageTurn3D::create(0.5f, Size(24.f, 32.f)), CallFunc::create([this, layerCanvas, drawNode](){ // キャンバスの入れ替え //-------------------------- // DrawNode入れ替え m_pDrawNode = drawNode; //-------------------------- }), nullptr ) ); if (maxPage == m_nowPage) { // もう進めないよ! button->setVisible(false); } button->getParent()->getChildByName("LastBackButton")->setVisible(true); } }); { itemNext->setName("LastNextButton"); itemNext->setVisible(false); } auto menuLastButtons = Menu::create(itemBack, itemNext, nullptr); { // 縦一列,間隔 const float padding = 10.f; menuLastButtons->alignItemsVerticallyWithPadding(padding); // 非表示 menuLastButtons->setVisible(false); auto canvas = layerCanvas->getSprite(); Vec2 leftBottom = canvas->convertToWorldSpace(Vec2::ZERO); auto size = itemBack->getContentSize(); menuLastButtons->setPosition(leftBottom.x / 2.f, leftBottom.y + size.height + padding / 2.f); this->addChild(menuLastButtons, ZOrder::MENULASTBUTTONS, "MenuLastButtons"); } //----------------------------------------------------- m_pDrawNode = DrawNode::create(); { m_pDrawNode->setAnchorPoint(Vec2::ZERO); auto canvas = layerCanvas->getSprite(); //layerCanvas->addChild(m_pDrawNode, 1); m_pDrawNode->setPosition( -(layerCanvas->getPositionX() - layerCanvas->getAnchorPoint().x*layerCanvas->getContentSize().width ), -(layerCanvas->getPositionY() - layerCanvas->getAnchorPoint().y*layerCanvas->getContentSize().height) ); canvas->addChild(m_pDrawNode, 1, "DrawNode"); } //----------------------------------------------------- // 描きすぎレイヤー auto layerTouch = Layer::create(); { layerTouch->setVisible(false); auto sprite = Sprite::create(); // 背景用 sprite->setTextureRect(Rect(0, 0, visibleSize.width, visibleSize.height)); sprite->setPosition(visibleSize / 2.f); sprite->setColor(Color3B::BLACK); sprite->setOpacity(192); layerTouch->addChild(sprite, 0); this->addChild(layerTouch, ZOrder::MOST_FRONT, "OverTouchLayer"); auto label = Label::createWithSystemFont("一人の持ち時間を使い果たしました\n" "\n次の人に回してタッチしてください\n", "GenShinGothic-Medium.ttf", calcFontSize(40.f)); { label->setPosition(layerTouch->getContentSize() / 2.f); label->setAlignment(TextHAlignment::CENTER, TextVAlignment::CENTER); label->setColor(Color3B(250, 250, 15)); layerTouch->addChild(label, 10, "Label"); } auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouches(false); listener->onTouchBegan = [this, layerTouch](Touch* touch, Event* event){ if (layerTouch->isVisible()) { return true; } return false; }; listener->onTouchEnded = [this, layerTouch](Touch* touch, Event* event){ //layerTouch->setVisible(false); //m_pListener->setSwallowTouches(false); // 描きすぎレイヤー非表示 this->_SetOverTouchLayerVisible(false); if (m_nowPage >= m_playerNum - 2) { // 全員描いた場合 // キャンバスめくらない m_flowPhase = FlowPhase::JUDGE; // 解答ボックス出現 auto visibleSize = Director::getInstance()->getVisibleSize(); m_pEditBox->runAction( Sequence::create( CallFunc::create([this]{ m_pEditBox->setEnabled(false); }), EaseBackOut::create( MoveTo::create(0.5f, Vec2(visibleSize.width / 2.f, m_pEditBox->getPositionY() ) // 画面中央まで ) ), CallFunc::create([this]{ m_pEditBox->setEnabled(true); }), nullptr ) ); // 全消去無効化 m_pNextButton->setVisible(false); // ラベルの設定 m_pLabel->setString("テーマを答えてください"); } else { // 前の人の絵を見せる m_flowPhase = FlowPhase::SHOW; m_pLabel->setString("見終わったらタッチして描き始めてください"); } // 全員描いた場合 //if (m_nowPage >= m_playerNum - 1) //{ // // フェーズ // m_flowPhase = FlowPhase::JUDGE; // // // 解答ボックス出現 // auto visibleSize = Director::getInstance()->getVisibleSize(); // m_pEditBox->runAction( // Sequence::create( // CallFunc::create([this]{ m_pEditBox->setEnabled(false); }), // EaseBackOut::create( // MoveTo::create(0.5f, // Vec2(visibleSize.width / 2.f, // m_pEditBox->getPositionY() // ) // 画面中央まで // ) // ), // CallFunc::create([this]{ m_pEditBox->setEnabled(true); }), // nullptr // ) // ); // // // ラベルの設定 // m_pLabel->setString("テーマを答えてください"); // // //} }; this->_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, layerTouch); m_pListener = listener; } //----------------------------------------------------- // 解答入力ボックス m_pEditBox = EditBox::create(spriteSmallBoard->getContentSize(), Scale9Sprite::create("board.png")); { // box auto size = m_pEditBox->getContentSize(); m_pEditBox->setPreferredSize(spriteSmallBoard->getContentSize()); m_pEditBox->setAnchorPoint(Vec2::ANCHOR_MIDDLE); m_pEditBox->setPosition(Vec2( origin.x + visibleSize.width + size.width / 2.f, origin.y + size.height / 2.f)); //m_pEditBox->setPosition(Vec2( // origin.x + visibleSize.width / 2.f, // origin.y + size.height / 2.f)); // 内部ラベル m_pEditBox->setFontName("GenShinGothic-Regular.ttf"); // ファミリー m_pEditBox->setFontSize(static_cast<int>(calcFontSize(25.f))); // サイズ m_pEditBox->setFontColor(Color3B(250, 250, 250)); // 色 m_pEditBox->getLabel()->setAnchorPoint(Vec2::ANCHOR_MIDDLE); m_pEditBox->getLabel()->setPosition(spriteSmallBoard->getContentSize() / 2.f); // 初期ラベル m_pEditBox->setPlaceHolder("ここをタッチして解答 (全てひらがなで、数字は半角で入力)"); // 例等初期値(入力時に消える) m_pEditBox->setPlaceholderFontColor(Color3B(5, 5, 5)); m_pEditBox->getPlaceHolderLabel()->setAnchorPoint(Vec2::ANCHOR_MIDDLE); m_pEditBox->getPlaceHolderLabel()->setPosition(spriteSmallBoard->getContentSize() / 2.f); // Box自体の設定 m_pEditBox->setMaxLength(20); // 文字数 m_pEditBox->setReturnType(EditBox::KeyboardReturnType::DEFAULT); // Returnキーが押された時 m_pEditBox->setInputMode(EditBox::InputMode::SINGLE_LINE); // 1行,自由文字列 // メソッド m_pEditBox->setDelegate(this); this->addChild(m_pEditBox, ZOrder::BOX, "EditBox"); } //----------------------------------------------------- // 間違え auto spriteCrossCanvas = Sprite::create("CrossCanvas.png"); { spriteCrossCanvas->setPosition(visibleSize / 2.f); spriteCrossCanvas->setVisible(false); this->addChild(spriteCrossCanvas, ZOrder::MOST_FRONT, "CrossCanvas"); } //----------------------------------------------------- // 正解 auto spriteCircleCanvas = Sprite::create("CircleCanvas.png"); { spriteCircleCanvas->setPosition(visibleSize / 2.f); spriteCircleCanvas->setVisible(false); this->addChild(spriteCircleCanvas, ZOrder::MOST_FRONT, "CircleCanvas"); } return true; }
/** * Constructor. * <p> * Builds an animation from the animation type so that it can be drawn later. * @param model * @param rect * @param animationType */ ImageView::ImageView(Model *model, const SDL_Rect &rect, AnimationType animationType) : RectangleView(model, rect) { animation = animationFactory->build(animationType); setHorizontalAlignment(HorizontalAlignment::LEFT); setVerticalAlignment(VerticalAlignment::BOTTOM); }
void GameInfoScene::createGamePanel() { Size visibleSize = Director::getInstance()->getVisibleSize(); auto bgcolor = LayerColor::create(GameInfos[game].color, visibleSize.width, visibleSize.height); bgcolor->setPosition(Point::ZERO); addChild(bgcolor); addChild(BackgroundWidget::createWithoutBackground()); auto hooker = TopAnchor::create(); addChild(hooker, 1); addChild(Vignette::create()); auto gamelogo = MAKESPRITE(GameInfos[game].logo); hooker->addChild(gamelogo); gamelogo->setPosition(VCP(0.5f, 0.70f)); gamelogo->runAction(RepeatForever::create(Sequence::createWithTwoActions( ScaleTo::create(3.0f, 1.05f), ScaleTo::create(3.0f, 1.0f) ))); auto hookerMenu = Menu::create(); hookerMenu->setPosition(Point::ZERO); hooker->addChild(hookerMenu); #if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID) auto btnMenu = MAKEBUTTON("btnBackUp", "btnBackDn", GameInfoScene::menuCloseCallback); btnMenu->setPosition(VCP(0.03f, 0.95f)); btnMenu->setAnchorPoint(Point(0, 1.0f)); btnMenu->setScale(1.3f); hookerMenu->addChild(btnMenu); auto gems = GemsLayer::create(); gems->setAnchorPoint(Point(1, 1)); gems->setPosition(VCP(0.97f, 0.95f)); hooker->addChild(gems); #endif auto pMenu = Menu::create(); pMenu->setPosition(Point::ZERO); addChild(pMenu, 1); auto episodetitle = Label::createWithTTF(LS(GameInfos[game].title), NORMAL_TTF, 60.0f); episodetitle->setHorizontalAlignment(TextHAlignment::CENTER); episodetitle->setPosition(CP(0.5f, 0.45f)); addChild(episodetitle); auto unlocktext = Label::createWithTTF(LS(GameInfos[game].description), NORMAL_TTF, 38.0f); unlocktext->setHorizontalAlignment(TextHAlignment::CENTER); unlocktext->setPosition(CP(0.5f, 0.30f)); addChild(unlocktext); #if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID) if (GameSettings::Gems >= 1) { //show buy button auto btnBuy = MakeButton("btnGreenUp", "btnGreenDn", LS("PlayFor1Gem"), 42.0f, CC_CALLBACK_1(GameInfoScene::btnBuyPressed, this)); btnBuy->setPosition(CP(0.5f, 0.05f)); btnBuy->setAnchorPoint(Point(0.5f, 0)); pMenu->addChild(btnBuy); } else { auto errortext = Label::createWithTTF(LS("NotEnoughGems"), FANCY_TTF, 42.0f); errortext->setColor(Color3B::RED); errortext->enableShadow(); errortext->setPosition(CP(0.5f, 0.05f)); addChild(errortext); } #else auto btnBuy = MakeButton("btnGreenUp", "btnGreenDn", LS("Play"), 42.0f, CC_CALLBACK_1(GameInfoScene::btnBuyPressed, this)); btnBuy->setPosition(CP(0.5f, 0.05f)); btnBuy->setAnchorPoint(Point(0.5f, 0)); pMenu->addChild(btnBuy); #endif }