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));
//将listview里的全部内容保存到一张图片里
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));
cocos2dx 保存scrollview里的全部内容到一张图里
原文:http://my.oschina.net/u/219482/blog/523225