很久没有更新博客了,最新瞎忙一些东西,浪费了不少时间,今天写项目的时候遇到了这个问题,发现引擎好像还没有类提供这个功能吧,你要是知道的话给我留言哈!实现单选框复选框其实很容易,使用cocostudio可以实现复选框的功能,单选框的话貌似是不可以的,今天我们实现这俩个功能不使用cocostudio,因为本人认为这个东西还不是太成熟,资料不多,最主要的是没有研究,所以我们就自己写代码实现一下吧,原理就是利用菜单去做这个单选框和复选框,菜单项有一个函数是selected,我们就是利用这个函数来完成我们要的功能,效果如图,代码so easy!

单选框和复选框的实现

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }

    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
	//添加一张背景图片
	CCSprite * background = CCSprite::create("background.png");
	background->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
	this->addChild(background);

	//以下是用来实现单选框的功能的
	//添加文本信息
	CCLabelTTF * text = CCLabelTTF::create("Sex:","",24);
	text->setColor(ccc3(255,100,100));
	text->setPosition(ccp(visibleSize.width/3,visibleSize.height/2));
	this->addChild(text);

	//创建俩个菜单项,用来实现当选框的功能
	male = CCMenuItemImage::create("single_choice_normal.png","single_choice_select.png",
		this,menu_selector(HelloWorld::button1));
	female = CCMenuItemImage::create("single_choice_normal.png",
		"single_choice_select.png",
		this,menu_selector(HelloWorld::button2));

	CCMenu * menu = CCMenu::create(male,female,NULL);
	menu->alignItemsHorizontallyWithPadding(80);
	menu->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
	//关键处在这里,设置male菜单项为选中状态,单选框在任何时刻必须有一个为选中状态
	male->selected();
	this->addChild(menu);

	//以下代码用来实现复选框的功能
	save = CCMenuItemImage::create("box_off.png","box_on.png",this,
		menu_selector(HelloWorld::button3));
	CCMenu * menu2 = CCMenu::create(save,NULL);
	menu2->setPosition(ccp(visibleSize.width/2,visibleSize.height/3));
	this->addChild(menu2);

	//添加文本信息
	CCLabelTTF * text2 = CCLabelTTF::create("Save:","",24);
	text2->setColor(ccc3(255,100,100));
	text2->setPosition(ccp(visibleSize.width/3,visibleSize.height/3));
	this->addChild(text2);

    return true;
}

//在以下俩个事件回调函数中改变他们的选中状态
void HelloWorld::button1(CCObject * obj)
{
	CCLog("male");
	male->selected();
	female->unselected();
}

void HelloWorld::button2(CCObject * obj)
{
	CCLog("female");
	female->selected();
	male->unselected();
}

//实现复选框的功能
void HelloWorld::button3(CCObject * obj)
{
	CCLog("save");
	static bool b = false;
	if(b == false)
	{
		save->selected();
		b = true;
	}
	else
	{
		save->unselected();
		b = false;
	}
}