CCControl控件也是cocos2d-x扩展控件中的一部分,包含了九宫格(nine pacth)按钮、滑动条、开关按钮、电位计按钮、步进器和颜色选择控件,这些也算是常用的控件了,下面是各个控件的使用方法及流程:
1.九宫格按钮
这是一种为了方便不失真缩放而诞生出的简洁型按钮,具体说来就是这种按钮使用的是纹理相对比较规则的图片,然后将图片划分为九个显示区域,在缩放按钮的时候,根据需要将这九个区域中的纹理按最佳比例进行延伸或者缩放,最后达到降低、甚至不失真的缩放效果。对应九宫格的类是CCScale9Sprite,它继承的是CCNodeRGBA,就是它负责将需要的图片按3X3的等份划分出九个区域,然后搭配CCControlButton这个按钮类即可制作出九宫格按钮,下面是官方原例Extension Test里抽出修改的代码:
//我把原来用的场景改成了层
class CCControlButtonTest_Event : public CCLayer
{
public:
bool init();
//这里定义了button的触摸事件
void touchDownAction(CCObject *sender, CCControlEvent controlEvent);
void touchDragInsideAction(CCObject *sender, CCControlEvent controlEvent);
void touchDragOutsideAction(CCObject *sender, CCControlEvent controlEvent);
void touchDragEnterAction(CCObject *sender, CCControlEvent controlEvent);
void touchDragExitAction(CCObject *sender, CCControlEvent controlEvent);
void touchUpInsideAction(CCObject *sender, CCControlEvent controlEvent);
void touchUpOutsideAction(CCObject *sender, CCControlEvent controlEvent);
void touchCancelAction(CCObject *sender, CCControlEvent controlEvent);
protected:
CC_SYNTHESIZE_RETAIN(CCLabelTTF *, m_pDisplayValueLabel, DisplayValueLabel)
CONTROL_SCENE_CREATE_FUNC(CCControlButtonTest_Event)
};
bool CCControlButtonTest_Event::init() {
bool bRet = false;
do
{
//
// super init first
//
CC_BREAK_IF(! CCLayer::init());
CCSize Size = CCDirector::sharedDirector()->getWinSize();
// Add the button 这里先设定了两个九宫格用来划分不同状态下按钮的图片区块
CCScale9Sprite *backgroundButton = CCScale9Sprite::create("button.png");
CCScale9Sprite *backgroundHighlightedButton = CCScale9Sprite::create("buttonHighlighted.png");
//这个label是用来做caption标题的
CCLabelTTF *titleButton = CCLabelTTF::create("Touch Me!", "Marker Felt", 30);
titleButton->setColor(ccc3(159, 168, 176));
//这里开始加入button控件,创建时引用了label和CCScale9Sprite
CCControlButton *controlButton = CCControlButton::create(titleButton, backgroundButton);
//这里用来设置按钮被触发状态(高亮状态)时的标题颜色和图片,这里可以看到引用的是另一个CCScale9Sprite
//在源码中还能看到其它状态的设置如:CCControlStateSelected、CCControlStateDisabled
controlButton->setBackgroundSpriteForState(backgroundHighlightedButton, CCControlStateHighlighted);
controlButton->setTitleColorForState(ccWHITE, CCControlStateHighlighted);
//这里设置了锚点,用来设定按钮状态变化时的中心坐标
controlButton->setAnchorPoint(ccp(0.5f, 1));
controlButton->setPosition(ccp(Siz