cocos2d-x在使用CCScale9Sprite的时候需要注意,因为使用到了扩展库所以要
- 在项目属性中的C/C++的附加包含目录中,添加$(SolutionDir)extensions,设置include路径
- 在连接器的输入中,添加libExtensions.lib,这个库文件位于cocos2d-x编译结果目录中(Debug.win32)
接下来需要在源码中加入相应的代码,首先是添加头文件及名字空间
#include "cocos-ext.h"
USING_NS_CC_EXT;
交叉编译的时候要注意在Android.mk中要加
$(call import-module,extensions) \
方可编译成功
首先展示CCScale9Sprite对象九妹的使用。
CCScale9Sprite* nineGirl = CCScale9Sprite::create("button.png");
nineGirl->setContentSize(CCSize(200, 100)); //这个是设置按钮的大小。~~可大可小的哦~~
nineGirl->setPosition(ccp(300, 200));
this->addChild(nineGirl);
效果
然后建立按钮我们用的是 CCControlButton类,这个类是已经封装好的。直接用就好了。下面晒出用法,我是在helloworld中使用的
首先在helloworld.h中添加声明
virtual void touchDownAction(CCObject* pSender, CCControlEvent event); //这个是触发按钮事件后运行的回调函数
CCControlButton *ControlButton; //这个是为了辅助回调函数里面控制对象的状态所用的对象
helloworld.h中先把官方帮我们做的按钮的代码注释掉,然后加上这些
//没按的时候的按钮
CCScale9Sprite *btn1 =CCScale9Sprite::create("CloseNormal.png");
//按的时候的按钮
CCScale9Sprite *btn2 =CCScale9Sprite::create("CloseSelected.png");
//按钮的标题
CCLabelTTF *title =CCLabelTTF::create("Hello", "Marker Felt", 30);
//初始化控制按钮,并且按钮的大小会因为标题自动调整
CCControlButton *controlBtn =CCControlButton::create(title,btn1);
//设置按钮按下时的图片,后面是官方替我们弄好的枚举。
controlBtn->setBackgroundSpriteForState(btn2,CCControlStateSelected);
controlBtn->setPreferredSize(CCSize(45,45));
controlBtn->setPosition(ccp(200,300));
controlBtn->addTargetWithActionForControlEvents(this,
cccontrol_selector(HelloWorld::touchDownAction),
CCControlEventTouchDown);
this->ControlButton =controlBtn;
this->addChild(controlBtn);
最后自定义回调函数
void HelloWorld::touchDownAction(CCObject* pSender, CCControlEvent event)
{
ControlButton->setPosition(ccp(300,100));
}
这样就完成了,首先是第一幅画面,当点击按钮会进第二幅画面按钮会变换位置。
这样就演示完了。
然后再将其他的消息也放在下面吧,用法都一样。
消息有这些
/* 当鼠标处于按下并曾经点中按钮时,则触发一次 */
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);
结束