【Cocos2d-x 控件篇001】我最爱的九妹和按钮事件,cocos2d-x001


1. 九妹图片

相信做过Android开发的都很熟悉九妹这个词,其实她就是一种图片,一种支持拉伸的图片,由一张小图拉伸到一张大图,并且是,任意的~

这实在是太让人兴奋了,因为Cocos2d-x已经封装了这个功能了,来,迫不及待地要看看了:

bool HelloWorld::init()
{
	bool bRet = flase;
	do{
		CC_BREAK_IF(!CCLayer::init());
		CCScale9Sprite* nineGirl = CCScale9Sprite::create("button.png");
		nineGirl->setContentSize(CCSize(200, 100)); 
		nineGirl->setPosition(ccp(300, 200)); 
		this->addChild(nineGirl);
		
		bRet = true;
	}while(0);
	return bRet;
} 

直接修改会有报错,这是因为CCScale9Sprite有点特别,他不在cocos2d包里,它属于扩展库。我们在HelloWorldScene.cpp的头部加上如下两句代码即可:

#include "cocos-ext.h"
using namespace cocos2d::extension; 

然后,在项目上单击鼠标右键,选择[属性]—[配置属性]—[C/C++]—[附加包含目录],编辑[附加包含目录],在最后一行”$(Solution)extensions“,根据不同的创建方式,可能有点不一样,部分人需要添加的时类似”D:\Cocos2d-x\cocos2d-2.1beta3-x-2.1.1\extension“。

然后单击确定按钮,这时报错的时:fatal error LINK1120:1 个无法解析的外部命令。

只是在链接时发生的错误,这时因为我们忘了引进库,现在在项目上单击鼠标右键,选择[属性]—[配置属性]-[连接器]—[输入],编辑[附加依赖项],在最后一行添加”libExtension.lib“,然后确定即可。


新建一个场景,然后添加这段代码,就能看到效果了:

按钮

稍微啰嗦一下,CCScale9Sprite,顾名思义,它是一张可拉伸的精灵

然后,button.png 是一张很小很小的图片:控件

只要给它设置一下大小:setContentSize(CCSize(200, 100));它就会自动拉伸,很神奇,很好用~

2. 九妹和按钮搭配

话说,九妹这么强大,不可能就这么放着浪费了~来看看,我们的按钮是怎么和九妹合作的:

 

	/* 正常状态下的按钮图片 */
	 CCScale9Sprite* btnNormal = CCScale9Sprite::create("button.png"); 
	/* 点击状态下的按钮图片 */
	 CCScale9Sprite* btnDown = CCScale9Sprite::create("buttonHighlighted.png"); 
	/* 按钮标题 */ 
	CCLabelTTF *title = CCLabelTTF::create("Touch Me!3324234", "Marker Felt", 30); 
	/* 按钮的大小会根据标题自动调整 */
	 CCControlButton* controlBtn = CCControlButton::create(title, btnNormal); 
	/* 设置按钮按下时的图片 */ 
	controlBtn->setBackgroundSpriteForState(btnDown, CCControlStateSelected); 
	controlBtn->setPosition(ccp(200, 200)); 
	this->addChild(controlBtn);

其实代码很简单,两张图片,分别是按钮正常状态和点击状态图片,当然,她们都是九妹图片~

然后是一个标题标签,当然了,如果按钮没有标题,呢谁知道是什么作用呢~

最后要界面一个新的家伙: CCControlButton

我是这么理解的,CCControlButton它只是一个空壳,它具备很多按钮所需要的功能(点击事件什么的),然后九妹图片和标题标签是内容,把内容添加到这个空壳里,一个按钮就诞生了:

【Cocos2d

但是有一点要注意,按钮的大小是根据标签内容进行缩放的,那,如果我想让按钮的大小固定呢?毕竟不是所有人都喜欢变化~

很简单,就一句话:

/* 强制设置按钮大小,如果按钮标题大小超过这个范围,则会自动扩大 */ controlBtn->setPreferredSize(CCSize(300, 50));


 

3. 按钮事件

按钮怎么可能少了点击事件呢?~这个很简单,直接看代码,注释已经很详细了。

	/* 当鼠标处于按下并曾经点中按钮时,则触发一次 */
	 controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDownAction), CCControlEventTouchDown);
	 /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发一次 */ 
	controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragEnter), CCControlEventTouchDragEnter);
	 /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发一次 */ 
	controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragExit), CCControlEventTouchDragExit); 
	/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发,只要达到条件,就不断触发 */ 
	controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragInside), CCControlEventTouchDragInside);
	 /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发,只要达到条件,就不断触发 */ 
	controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchDragOutside), CCControlEventTouchDragOutside); 
	/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围内,则触发一次 */ 
	controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchUpInside), CCControlEventTouchUpInside); 
	/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围外,则触发一次 */
	controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchUpOutside), CCControlEventTouchUpOutside);
	 /* 暂时没有发现能用鼠标触发这个事件的操作,看了注释,应该是由其它事件中断按钮事件而触发的 */ 
	controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::touchCancel), CCControlEventTouchCancel);

回调函数是这样的:

void touchDownAction(CCObject* pSender, CCControlEvent event);
void touchDragEnter(CCObject* pSender, CCControlEvent event); 
void touchDragExit(CCObject* pSender, CCControlEvent event); 
void touchDragInside(CCObject* pSender, CCControlEvent event); 
void touchDragOutside(CCObject* pSender, CCControlEvent event); 
void touchUpInside(CCObject* pSender, CCControlEvent event); 
void touchUpOutside(CCObject* pSender, CCControlEvent event); 
void touchCancel(CCObject* pSender, CCControlEvent event);

唯一要注意的是,CCControlEvent 不是指针,千万不要习惯了就给它加一个*~


www.xyjys.comtrue/article/20231129/2444293.htmlTechArticle【Cocos2d-x 控件篇001】我最爱的九妹和按钮事件,cocos2d-x001 1. 九妹图片 相信做过 Android 开发的都很熟悉九妹这个词,其实她就是一种图片,一种支持拉伸的图片,由一张小图拉伸到一张...

相关文章

    暂无相关文章

小鱼文聚评论

XY推荐