void QuestionLayer::displaySubViews() { CCLOG("%f %f %f %f", this->getPositionX(), this->getPositionY(), this->getContentSize().width, this->getContentSize().height); CCArray* answer = questionObj->answerArray; int columns = 0; int rows = 0; float spaceX = 0; if (answer->count() <= 2) { //判断题2X1个 columns = 2; rows = 1; spaceX = 80; } else if (answer->count() <= 3) { //3选1 columns = 1; rows = 3; spaceX = 40; } else if (answer->count() <= 4) { //最多2x2个答案选项的 columns = 2; rows = (answer->count()*1.0f/columns)>(answer->count()/columns)?(answer->count()/columns+1):(answer->count()/columns); spaceX = 60; } else if (answer->count() <= 9) { //最多3x3个答案选项 columns = 3; rows = (answer->count()*1.0f/columns)>(answer->count()/columns)?(answer->count()/columns+1):(answer->count()/columns); spaceX = 40; } else if (answer->count() <= 16) { //最多4x4个答案选项 columns = 4; rows = (answer->count()*1.0f/columns)>(answer->count()/columns)?(answer->count()/columns+1):(answer->count()/columns); spaceX = 20; } float spaceY = spaceX*(CCDirector::sharedDirector()->getWinSize().height/1334); //题目标题栏高度 float topHeight = 190; CCLOG("%f %f", this->getContentSize().width, this->getContentSize().height); // float totalWidth = this->getContentSize().width; float cellWidth = (totalWidth-spaceX*(columns+1))/columns; float totalHeight = this->getContentSize().height-topHeight-50; //要减去答题头部区域 float cellHeight = (totalHeight-spaceY*(rows+1))/rows; CCLOG("[%d %d]:%f %f", columns, rows, cellWidth, cellHeight); while (cellHeight > cellWidth) { spaceY += 10; cellHeight = (totalHeight-spaceY*(rows+1))/rows; } for (int i=0; i<answer->count(); i++) { // CCString* ans = (CCString *)(answer->objectAtIndex(i)); CCLabelTTF* pLabel = CCLabelTTF::create(ans->getCString(), "Arial", 24, CCSizeMake(cellWidth, cellHeight), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter); CCControlButton* button = CCControlButton::create(pLabel, CCScale9Sprite::create("button_answer.png", CCRectMake(0, 0, 126, 70))); button->addTargetWithActionForControlEvents(this, cccontrol_selector(QuestionLayer::touchDownAction), CCControlEventTouchUpInside); button->setTag(i+1); button->setAnchorPoint(ccp(0.5f, 0.5f)); // button->setPosition( ccp(-totalWidth/2+spaceX+(cellWidth+spaceX)*(i%columns)+cellWidth/2, -topHeight/2-totalHeight/2+spaceY+(cellHeight+spaceY)*(i/columns)+cellHeight/2) ); button->setPosition( ccp(-totalWidth/2+spaceX+(cellWidth+spaceX)*(i%columns)+cellWidth/2, (totalHeight-topHeight)/2-spaceY-(cellHeight+spaceY)*(i/columns)-cellHeight/2) ); CCLOG("button坐标:%f %f", button->getPositionX(), button->getPositionY()); button->setPreferredSize(CCSize(cellWidth, cellHeight)); this->addChild(button, 1); } }
bool CPullMachHelpLayer::init() { if (!CCLayer::init()) return false; CCSize barDownSize; //µ×Ãæ±ß¿ò³ß´ç CCSize barUpSize; //ÉÏÃæ±ß¿ò³ß´ç CCSize infoBgSize; //ÐÅÏ¢±³¾°³ß´ç CCSize infoViewSize; //ÐÅÏ¢¿ÉÊӳߴç CCSprite * pSprite = NULL; if (m_pResManager->GenerateNodeByCfgID(eSpriteType_Base, PullMach_Bg_Help_Bar_Down, pSprite)) { barDownSize = pSprite->getContentSize(); pSprite->setAnchorPoint(CCPointZero); pSprite->setPosition(CCPointZero); this->addChild(pSprite); } { float fHeight = this->getContentSize().height - 200; infoBgSize.setSize(barDownSize.width, (fHeight > 600) ? 600 : fHeight); CCLayerColor * bgLayer = CCLayerColor::create(ccc4(0, 24, 85, 255), infoBgSize.width, infoBgSize.height); bgLayer->setPosition(ccp(0, barDownSize.height)); this->addChild(bgLayer); } if (m_pResManager->GenerateNodeByCfgID(eSpriteType_Base, PullMach_Bg_Help_Bar_Up, pSprite)) { barUpSize = pSprite->getContentSize(); pSprite->setAnchorPoint(CCPointZero); pSprite->setPosition(ccp(0, barDownSize.height + infoBgSize.height)); this->addChild(pSprite); } //Ìí¼Ó¹ö¶¯ÄÚÈÝ infoViewSize.setSize(infoBgSize.width - 20, infoBgSize.height); if (m_pResManager->GenerateNodeByCfgID(eSpriteType_Base, PullMach_Bg_Help_Info, pSprite)) { pSprite->setAnchorPoint(ccp(0.5f, 0.0f)); pSprite->setPosition(ccp(infoViewSize.width / 2, 0)); } CCLayerColor * layerColor = CCLayerColor::create(ccc4(0, 13, 32, 255), infoViewSize.width, pSprite->getContentSize().height); layerColor->setPosition(CCPointZero); layerColor->addChild(pSprite); m_pScroll = CCScrollView::create(); m_pScroll->setViewSize(infoViewSize); m_pScroll->setPosition(ccp(10, barDownSize.height)); m_pScroll->setDirection(kCCScrollViewDirectionVertical); m_pScroll->addChild(layerColor); m_pScroll->setContentSize(layerColor->getContentSize()); m_pScroll->setContentOffset(m_pScroll->minContainerOffset()); m_pScroll->setTouchPriority(kCCMenuHandlerPriority - 1); this->addChild(m_pScroll); this->setContentSize(CCSize(infoBgSize.width, barDownSize.height + barUpSize.height + infoBgSize.height)); //Ìí¼Ó¹Ø±Õ°´Å¥ CCControlButton* pCloseButton = m_pResManager->CreateControlButton(PullMach_Bt_Help_Close_N, PullMach_Bt_Help_Close_C); pCloseButton->setAnchorPoint(ccp(1, 1)); pCloseButton->setPosition(getContentSize().width - 10, getContentSize().height - 4); pCloseButton->addTargetWithActionForControlEvents(this, cccontrol_selector(CPullMachHelpLayer::OnTouchClose), CCControlEventTouchUpInside); pCloseButton->setScaleX(1.5f); this->addChild(pCloseButton); return true; }