map<int,string> levelMaps;
set<int> saved;//记录存好的文件
for(int i=0; i<189; i++){
//检查188个关卡,有哪些已经配置好了
string levelName = "guanka_";
levelName.append(Value(i).asString());
levelMaps.insert(map<int,string>::value_type(i,levelName));
levelName.append(".tpl");
if(FileUtils::getInstance()->isFileExist(levelName)){
//文件存在就记录
saved.insert(i);
}
}
auto ws = Director::getInstance()->getWinSize();
auto lstw = ui::ListView::create();
lstw->setName("showLevel");
lstw->setBackGroundColorType(ui::ScrollView::BackGroundColorType::SOLID);
lstw->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
lstw->setSize(Size(110,ws.height));
lstw->setDirection(ui::ScrollView::Direction::VERTICAL);
lstw->setBounceEnabled(true);
lstw->setPosition(Vec2(0,0));
pNode->addChild(lstw);
for(std::pair<int,string> mapL : levelMaps){
auto lay = Layout::create();
lay->setBackGroundColorType(ScrollView::BackGroundColorType::SOLID);
lay->setBackGroundColor(Color3B::GRAY);
lay->setTouchEnabled(true);
lay->setUserData((void*)mapL.first);
lay->setContentSize(Size(110,42));//117 114
Label *label = Label::createWithSystemFont(mapL.second,"",18);
label->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
if(saved.find(mapL.first) != saved.end()){
//如果存在改变文字颜色
label->setColor(Color3B::GREEN);
}else {
label->setColor(Color3B::BLACK);
}
label->setDimensions(110,30);
label->setPosition(lay->getContentSize()/2);
lay->addClickEventListener([=](Ref *sender){
auto select = dynamic_cast<Layout*>(lstw->getUserObject());
if(select == lay){
return ;
}
if(select){
select->setBackGroundColor(Color3B::GRAY);
}
// m_guanka.canMove = pro.m_type;
lay->setBackGroundColor(Color3B::RED);
lstw->setUserObject(lay);
//设置关卡级数
m_level = mapL.first;
Button * levelText = dynamic_cast<Button*>(pNode->getChildByName("m_level"));
if(levelText){
levelText->setTitleText(Value(m_level).asString());
}
pNode->removeChildByName("showLevel");
//重新读取配置信息
readGameDataTpl();
});
//设置默认
if(m_level == mapL.first){
lay->setBackGroundColor(Color3B::RED);
lstw->setUserObject(lay);
}
lay->addChild(label);
lstw->addChild(lay);
}
lstw->runAction(Sequence::create(DelayTime::create(0.1),CallFunc::create([=](){
// lstw->scrollToPercentVertical(m_level*1.0/levelMaps.size()*100.0,0.1,true);
log("------------------------x=%f,y=%f,heigh=%f",lstw->getInnerContainer()->getPosition().x,lstw->getInnerContainer()->getPosition().y,lstw->getInnerContainer()->getSize().height);
int sn = lstw->getInnerContainerSize().height/960;
auto off = lstw->getInnerContainerSize().height-960.0*sn;
// lstw->getInnerContainer()->setPosition(Vec2(0,0));
auto render = RenderTexture::create(640,lstw->getInnerContainerSize().height); render->begin(); auto pos = lstw->getInnerContainer()->getPosition(); for(int i=0; i<sn-1; i++){ this->visit();// pos+= Vec2(0,960); pos.y += 960; lstw->getInnerContainer()->setPosition(pos); log("pos [%d] y=%f",i,pos.y); } log("-----1pos [%d] y=%f",sn-2,pos.y); this->visit(); pos.y += off; lstw->getInnerContainer()->setPosition(pos); this->visit(); log("------2pos [%d] y=%f",sn-1,pos.y); render->end(); render->saveToFile("sssss.png"); }),nullptr));
原文链接:https://www.f2er.com/cocos2dx/341007.html