标签:
偶在今天想通过某一个按钮的按下松开实现针对于某一个动画的切换,之前使用的CCMenuItemImage,大概代码如下:
CCMenuItemImage *pFightItem = CCMenuItemImage::create(
"Normal.png","Selected.png",this,
menu_selector(SecondScene::menuFightCallback));
pFightItem->setPosition(ccp(400 ,200));
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);
然后查各种资料,未查到关于CCMenuItemImage 关于按钮状态的设定,虽然可以使用UIButton中的ToucheEventType来获取按钮的不同状态,但是我觉得坑人的cocos2d-x还应该有其它的方法,那就是使用:CCControlButton
大概的代码如下:
#include "cocos-ext.h"
using namespace cocos2d::extension;
// 按钮文字
CCLabelTTF *title = CCLabelTTF::create("Fight","Market Felt",20);
// 正常状态图片
CCScale9Sprite* btnNormal = CCScale9Sprite::create("CloseNormal.png");
// 按下状态图片
CCScale9Sprite* btnDown = CCScale9Sprite::create("CloseSelected.png");
// 创建按钮(共有四种方式,大家自行查看代码参考)
CCControlButton* Btn = CCControlButton::create(title,btnNormal);
// 设置按钮按下时的图片
Btn->setBackgroundSpriteForState(btnDown,CCControlStateSelected);
// 设置按钮按下时文字的状态
Btn->setTitleColorForState(ccYELLOW,CCControlStateHighlighted);
Btn->setPosition(ccp(400 ,200));
this->addChild(Btn);
// 设置按钮按下事件
Btn->addTargetWithActionForControlEvents(this, cccontrol_selector(SecondScene::touchDown), CCControlEventTouchDown);
// 设置按钮松开事件
Btn->addTargetWithActionForControlEvents(this, cccontrol_selector(SecondScene::touchUpInside), CCControlEventTouchUpInside);
针对于CCControlButton的状态,共有如下几种:
enum
{
// 鼠标按下按钮,触发
CCControlEventTouchDown = 1 << 0,
// 鼠标按下按钮,且在按钮范围内不曾松开,触发
CCControlEventTouchDragInside = 1 << 1,
// 鼠标按下按钮,离开按钮范围且不曾松开,触发
CCControlEventTouchDragOutside = 1 << 2,
CCControlEventTouchDragEnter = 1 << 3,
CCControlEventTouchDragExit = 1 << 4,
// 鼠标按下按钮,在按钮范围内松开,触发
CCControlEventTouchUpInside = 1 << 5,
// 鼠标按下阿牛,在按钮范围外松开,触发
CCControlEventTouchUpOutside = 1 << 6,
CCControlEventTouchCancel = 1 << 7,
CCControlEventValueChanged = 1 << 8
};
typedef unsigned int CCControlEvent;
偶新人尔,如果大家看不明白的,可自行参考:
cocos2d-x自带的demo 中的CCControlButtonTest.cpp
cocos2d-x 之CCControlButton的使用方法
标签:
原文地址:http://www.cnblogs.com/SkyflyBird/p/5040145.html