cocos2d-x3.0 GUI Button PageView Layout ListView ScrollView Image Checkbox editBox
#pragma mark 页面视图
cocos2d::ui::Layout * UItest:: createLayout(int index){
auto ly = cocos2d::ui::Layout::create();
ly->setBackGroundImage("HelloWorld2.png");
ly->setContentSize(Size(960, 640));
//ly->setAnchorPoint(Vec2(0.5, 0.5));
//ly->setPosition(Vec2(480, 320));
//addChild(ly);
for (int i=0; i<9; i++) {
for (int j=0; j<3; j++) {
auto btn = cocos2d::ui::Button::create();
btn->loadTextureNormal("editBG.png");
btn->setScale9Enabled(true);
btn->setContentSize(Size(100, 50));
btn->setZoomScale(0.1);
btn->setPressedActionEnabled(true);
btn->setTitleText(StringUtils::format("%d,%d",index,i));
btn->setTitleFontSize(40);
btn->setPosition(Vec2(100+i/3*380, 100+25+j%3*220));
ly->addChild(btn);
}
}
return ly;
}
void UItest:: initPageView(){
auto pv =cocos2d::ui::PageView::create();
for (int i=0; i<5; i++) {
auto lv = createLayout(i);
pv->addPage(lv);
}
pv->setPosition(Vec2(480, 320));
pv->setContentSize(Size(960, 640));
pv->setAnchorPoint(Vec2(0.5, 0.5));
pv->setCustomScrollThreshold(50);// 设置滑动多少距离会切换到下一个page
addChild(pv);
pv->addEventListener(CC_CALLBACK_2(UItest::pageview_call, this));
}
void UItest:: pageview_call(Ref* sender,cocos2d::ui::PageView::EventType type){
auto item = dynamic_cast<cocos2d::ui::PageView *>(sender);
auto index = item->getCurPageIndex();
log("index is %zd",index);
}
#pragma mark 布局视图
void UItest:: initLayout(){
auto ly = cocos2d::ui::Layout::create();
ly->setBackGroundImage("HelloWorld2.png");
ly->setContentSize(Size(960, 640));
ly->setAnchorPoint(Vec2(0.5, 0.5));
ly->setPosition(Vec2(480, 320));
addChild(ly);
for (int i=0; i<9; i++) {
auto btn = cocos2d::ui::Button::create();
btn->loadTextureNormal("editBG.png");
btn->setScale9Enabled(true);
btn->setContentSize(Size(100, 50));
btn->setZoomScale(0.1);
btn->setPressedActionEnabled(true);
btn->setTitleText(StringUtils::format("%d",i));
btn->setTitleFontSize(40);
btn->setPosition(Vec2(100+50+253*i/3, 100+25+140*i/3));
ly->addChild(btn);
}
}
#pragma mark 列表视图
void UItest::initListView(){
auto list = cocos2d::ui::ListView::create();
list->setContentSize(Size(400, 600));
list->setPosition(Vec2(480, 320));
list->setDirection(cocos2d::ui::ScrollView::Direction::VERTICAL);
list->setAnchorPoint(Vec2(0.5, 0.5));
list->setItemsMargin(20);// 设置item间的间距
addChild(list);
for(int i=0;i<20;i++){
auto btn = cocos2d::ui::Button::create();
btn->loadTextureNormal("xydb.png");
btn->loadTexturePressed("xydb.png");
btn->setPressedActionEnabled(true);
btn->setScale9Enabled(true);
btn->setContentSize(Size(400, 100));
btn->setPosition(Vec2(480, 320));
btn->setTag(i);
btn->addClickEventListener([&](Ref *sender){
// log("item_index:%d",i);
// auto bt = dynamic_cast<cocos2d::ui::Button*>(sender);
// bt->setColor(Color3B::RED);
});
list->pushBackCustomItem(btn);
}
list->addEventListener(CC_CALLBACK_2(UItest::listView_call, this));
}
// 添加监听函数
void UItest::listView_call(Ref *sender,cocos2d::ui::ListView::EventType type){
auto list = dynamic_cast<cocos2d::ui::ListView *>(sender);
// 获取当前选中的下标(索引)
auto item_id = list->getCurSelectedIndex();
log("index %zd",item_id);
// 根据获取当前选中对象得到item获取当前选中的item对象
auto item = list->getItem(item_id);
item->setColor(Color3B::BLACK);
if(type==cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_START){
log("start");
}else if (type==cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_END){
log("end");
}
}
#pragma mark 滑动视图
void UItest::initScrolView(){
auto sc = cocos2d::ui::ScrollView::create();
sc->setContentSize(Size(960, 640));// 外部的窗口的大小
sc->setInnerContainerSize(Size(960, 640*5));// 内部的窗口的大小
sc->setPosition(Vec2(480, 320));
sc->setAnchorPoint(Vec2(0.5, 0.5));// 默认锚点为(0,0)
sc->setDirection(cocos2d::ui::ScrollView::Direction::BOTH);// 设置滑动的方向
addChild(sc);
sc->setBounceEnabled(true);//设置回弹
sc->setInertiaScrollEnabled(true);//惯性滑动
for (int i=0; i<5; i++) {
auto sp = Sprite::create("HelloWorld2.png");
sp->setPosition(480, 320+640*i);
sc->addChild(sp);
auto btn = cocos2d::ui::Button::create();
btn->loadTextureNormal("0.png");
btn->loadTexturePressed("2.png");
btn->loadTextureDisabled("3.png");
btn->setPosition(Vec2(480, 320));
sp->addChild(btn);
}
sc->addEventListener(CC_CALLBACK_2(UItest::scroll_call, this));
}
void UItest:: scroll_call(Ref * sender,cocos2d::ui::ScrollView::EventType type){
if (type==cocos2d::ui::ScrollView::EventType::BOUNCE_BOTTOM) {
log("BOUNCE_BOTTOM");
}else if (type==cocos2d::ui::ScrollView::EventType::BOUNCE_LEFT){
log("BOUNCE_Left");
}else if (type==cocos2d::ui::ScrollView::EventType::BOUNCE_RIGHT){
log("BOUNCE_Right");
}else if (type==cocos2d::ui::ScrollView::EventType::SCROLLING){
log("scrolling");
}else if (type==cocos2d::ui::ScrollView::EventType::SCROLL_TO_LEFT){
log("SCROLL_TO_LEFT");
}else if (type==cocos2d::ui::ScrollView::EventType::SCROLL_TO_RIGHT){
log("SCROLL_TO_RIGHT");
}else if (type==cocos2d::ui::ScrollView::EventType::SCROLL_TO_TOP){
log("SCROLL_TO_Top");
}
}
#pragma mark 输入框
void UItest::initditBox(){
auto edit = cocos2d::ui::EditBox::create(Size(400, 60), "toukuang.png");
edit->setPosition(Vec2(480, 320));
edit->setPlaceHolder("Please input in this box!");
// 设置真正输入的字
edit->setFontColor(Color3B::BLACK);
edit->setFontSize(30);
// 设置输入模式
edit->setInputFlag(cocos2d::ui::EditBox::InputFlag::PASSWORD);
// 设置键盘返回模式
edit->setReturnType(EditBox::KeyboardReturnType::DONE);
edit->setDelegate(this);
addChild(edit);
}
// 重写代理函数(这个类需要继承自cocos2d::ui::EditBoxDelegate代理)
void UItest::editBoxEditingDidBegin(EditBox* editBox){
log("input begin");
}
void UItest::editBoxEditingDidEnd(EditBox* editBox){
log("input end");
}
void UItest::editBoxTextChanged(EditBox* editBox, const std::string& text){
log("input changed");
log("%s",text.c_str());
}
void UItest::editBoxReturn(EditBox* editBox){
log("return");
}
#pragma mark 图片
void UItest::initImage(){
auto image = cocos2d::ui::ImageView::create("HelloWorld.png");
image->setScale9Enabled(true);
image->setContentSize(Size(400, 300));
image->cocos2d::Node::setPosition(480, 320);
addChild(image);
}
#pragma mark 勾选框
void UItest::initCheckBox(){
auto checkBox = cocos2d::ui::CheckBox::create();
checkBox->loadTextureBackGround("switch-off.png");
checkBox->loadTextureBackGroundSelected("switch-on.png");
checkBox->loadTextureFrontCross("switch-on.png");//切换时的图片
checkBox->setPosition(Vec2(480, 320));
checkBox->addEventListener(CC_CALLBACK_2(UItest::checkCall,this));
addChild(checkBox);
}
void UItest:: checkCall(Ref* sender,cocos2d::ui::CheckBox::EventType type){
auto item = dynamic_cast<cocos2d::ui::CheckBox *>(sender);
log("sssssss");
CCASSERT(item, "the checkBox is null");
if (type==cocos2d::ui::CheckBox::EventType::SELECTED) {
log("selected");
}else{
log("unselected");
}
}
#pragma mark 按钮
void UItest::initButton(){
auto button = cocos2d::ui::Button::create();
button->loadTextureNormal("0.png");
button->loadTexturePressed("2.png");
button->loadTextureDisabled("3.png");
// button->setBright(false); 设置不可点击按钮
button->setPressedActionEnabled(true); // 设置点击动作
button->setZoomScale(-0.5);// 原始大小加上参数即为缩放比例 即 1+(-0.5)
button->setContentSize(Size(300, 300));// 设置按钮尺寸
button->setScale9Enabled(true); // 开启九宫格(适用于点击后的按钮图片的缩放)
// 设置按钮标题
button->setTitleText("按钮a1");
button->setTitleColor(Color3B::BLACK);
button->setTitleFontName("Marker Felt.ttf");//如果不使用ttf就会是系统默认字体(ttf文件不含中文)
button->setTitleFontSize(80);
// 添加按钮监听
button->addClickEventListener(CC_CALLBACK_1(UItest::buttonClick, this));
button->cocos2d::Node::setPosition(480, 200);
addChild(button);
}
// 添加按钮回调函数
void UItest::buttonClick(Ref * sender){
log("click");
auto item = dynamic_cast<cocos2d::ui::Button *>(sender);
CCASSERT(item, "this button is null");// 异常处理,如果item为null输出一句话
}