现在的位置: 首页 > 综合 > 正文

cocos2d-x 菜鸟实习生学习篇(九) 控件篇(下)

2014年06月09日 ⁄ 综合 ⁄ 共 5818字 ⁄ 字号 评论关闭

被搭建安卓平台弄的够呛。周六下午终于有时间可以发博客里。

继续控件(下):

3、ControlStepper

bool ControlStepper::init()
{
	CCSize size = CCDirector::sharedDirector()->getWinSize();


	CCNode* layer = CCNode::create();
	layer->setPosition(ccp(size.width / 2,size.height / 2));
	this->addChild(layer,1);


	double layer_width = 0;


	CCScale9Sprite* background = CCScale9Sprite::create("buttonBackground.png");
	background->setContentSize(CCSizeMake(100,50));
	background->setPosition(ccp(layer_width + background->getContentSize().width / 2.0f,0));
	layer->addChild(background);


	//下面这两步 是时时更新设置显示在框里的内容,设置初始值为0.00
    this->setDisplayValueLabel(CCLabelTTF::create("0", "HelveticaNeue-Bold", 30));
	//设置位置,也就是现实在background的坐标
    m_pDisplayValueLabel->setPosition(background->getPosition());
    layer->addChild(m_pDisplayValueLabel);


	layer_width					+= background->getContentSize().width;


	//添加controlStepper
    CCControlStepper *stepper   = this->makeControlStepper();
    stepper->setPosition(ccp (layer_width + 10 + stepper->getContentSize().width / 2, 0));
    stepper->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlStepper::valueChanged), CCControlEventValueChanged);
    layer->addChild(stepper);
      
	//layer_width的值增加,增加一个background的长度
    layer_width                 += stepper->getContentSize().width;


	layer->setContentSize(CCSizeMake(layer_width,0));
	layer->setAnchorPoint(ccp (0.5f,0.5f) );


	this->valueChanged(stepper, CCControlEventValueChanged);


	//add mainMenu
	MainMenu *mainMenu = new MainMenu();
	mainMenu->mainMenu();
	this->addChild(mainMenu);


	return true;
}


CCControlStepper* ControlStepper::makeControlStepper()
{
	CCSprite *minusSprite       = CCSprite::create("stepper-minus.png");
    CCSprite *plusSprite        = CCSprite::create("stepper-plus.png");
    
    return CCControlStepper::create(minusSprite, plusSprite);
}


void ControlStepper::valueChanged(CCObject *sender, CCControlEvent controlEvent)
{
    CCControlStepper* pControl = (CCControlStepper*)sender;
    // Change value of label.
    m_pDisplayValueLabel->setString(CCString::createWithFormat("%0.02f", (float)pControl->getValue())->getCString());	
}

效果如下:

4、ControlSwitch

bool ControlSwitch::init()
{
	CCSize size = CCDirector::sharedDirector()->getWinSize();

	CCNode* layer = CCNode::create();
	layer->setPosition(ccp(size.width / 2,size.height / 2));
	this->addChild(layer,1);

	double layer_width = 0;

	CCScale9Sprite* background = CCScale9Sprite::create("buttonBackground.png");
	background->setContentSize(CCSizeMake(100,50));
	background->setPosition(ccp(layer_width + background->getContentSize().width / 2.0f,0));
	layer->addChild(background);

	m_pDisplayValueLabel = CCLabelTTF::create("#color" ,"Marker Felt" ,30);
	m_pDisplayValueLabel->retain();

	m_pDisplayValueLabel->setPosition(background->getPosition());
	layer->addChild(m_pDisplayValueLabel);

	layer_width += background->getContentSize().width;

	// Create the switch,参数分别是:滑动遮罩,on背景图,off背景图,滑动按钮,文字on,文字off
    CCControlSwitch *switchControl = CCControlSwitch::create
        (
            CCSprite::create("switch-mask.png"),
            CCSprite::create("switch-on.png"),
            CCSprite::create("switch-off.png"),
            CCSprite::create("switch-thumb.png"),
            CCLabelTTF::create("On", "Arial-BoldMT", 16),
            CCLabelTTF::create("Off", "Arial-BoldMT", 16)
        );
    switchControl->setPosition(ccp (layer_width + 10 + switchControl->getContentSize().width / 2, 0));
    layer->addChild(switchControl);

    switchControl->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlSwitch::valueChanged), CCControlEventValueChanged);
        
    // Set the layer size
    layer->setContentSize(CCSizeMake(layer_width, 0));
    layer->setAnchorPoint(ccp (0.5f, 0.5f));
        
    // Update the value label
    valueChanged(switchControl, CCControlEventValueChanged);


	//add mainMenu
	MainMenu *mainMenu = new MainMenu();
	mainMenu->mainMenu();
	this->addChild(mainMenu);

	return true;
}

效果如下:

5、ControlSlider

bool ControlSlider::init()
{
	CCSize size = CCDirector::sharedDirector()->getWinSize();


	// Add a label in which the slider value will be displayed
    m_pDisplayValueLabel = CCLabelTTF::create("Move the slider thumb!\nThe lower slider is restricted." ,"Marker Felt", 32);//一开始初始化的显示文字
    m_pDisplayValueLabel->retain();
    m_pDisplayValueLabel->setAnchorPoint(ccp(0.5f, -1.0f));
    m_pDisplayValueLabel->setPosition(ccp(size.width / 1.7f, size.height / 2.0f));
    addChild(m_pDisplayValueLabel);


	// Add the slider,三个参数分别是:背景条,进度条,滑动按钮
    CCControlSlider *slider = CCControlSlider::create("sliderTrack.png","sliderProgress.png" ,"sliderThumb.png");
    slider->setAnchorPoint(ccp(0.5f, 1.0f));
    slider->setMinimumValue(0.0f); // Sets the min value of range
    slider->setMaximumValue(5.0f); // Sets the max value of range
    slider->setPosition(ccp(size.width / 2.0f, size.height / 2.0f + 16));
	slider->setTag(1);


    // When the value of the slider will change, the given selector will be call
    slider->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlSlider::valueChanged), CCControlEventValueChanged);


	CCControlSlider *restrictSlider = CCControlSlider::create("sliderTrack.png","sliderProgress.png" ,"sliderThumb.png");
    restrictSlider->setAnchorPoint(ccp(0.5f, 1.0f));
    restrictSlider->setMinimumValue(0.0f); // Sets the min value of range
    restrictSlider->setMaximumValue(5.0f); // Sets the max value of range
	restrictSlider->setMaximumAllowedValue(4.0f);//虽然范围显示的是上面的那个范围,但实际能拖动到范围是这个数值。不理解的话想想中国的民主,很容易理解的嘛
	restrictSlider->setMinimumAllowedValue(1.5f);
	restrictSlider->setValue(3.0f);
    restrictSlider->setPosition(ccp(size.width / 2.0f, size.height / 2.0f - 24));
	restrictSlider->setTag(2);


//same with restricted
	restrictSlider->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlSlider::valueChanged), CCControlEventValueChanged);


    addChild(slider);    
	addChild(restrictSlider);


	//add mainMenu
	MainMenu *mainMenu = new MainMenu();
	mainMenu->mainMenu();
	this->addChild(mainMenu);


	return true;
}


void ControlSlider::valueChanged(CCObject *sender, CCControlEvent controlEvent)
{
    CCControlSlider* pSlider = (CCControlSlider*)sender;
    // Change value of label.
	//如果tag = 1,则是slider
	if(pSlider->getTag() == 1)
		m_pDisplayValueLabel->setString(CCString::createWithFormat("Upper slider value = %.02f", pSlider->getValue())->getCString());  
	//如果是第二个,则是restrictSlider
	if(pSlider->getTag() == 2)
		m_pDisplayValueLabel->setString(CCString::createWithFormat("Lower slider value = %.02f", pSlider->getValue())->getCString());  
}

效果如下:

好了,没了。

抱歉!评论已关闭.