实现CCControlSlider,却在模态窗口中不能触摸,该怎么办。。代码如下:
PopupLayer.h
#ifndef TestCpp_PopupLayer_h
#define TestCpp_PopupLayer_h
#include "cocos2d.h"
#include "cocos-ext.h"
#include "MySlider.h"
using namespace cocos2d;
using namespace cocos2d::extension;
class PopupLayer: public CCLayer{
public:
PopupLayer();
~PopupLayer();
virtual bool init();
CREATE_FUNC(PopupLayer);
virtual void registerWithTouchDispatcher(void);
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
static PopupLayer* create(const char* backgroundImage);
}
#endif
PopupLayer.cpp
#include "PopupLayer.h"
PopupLayer::PopupLayer():
m__pMenu(NULL)
, m_contentPadding(0)
, m_contentPaddingTop(0)
, m_callbackListener(NULL)
, m_callback(NULL)
, m__sfBackGround(NULL)
, m__s9BackGround(NULL)
, m__ltContentText(NULL)
, m__ltTitle(NULL)
, m__controlSlider(NULL) // 新增
{
}
PopupLayer::~PopupLayer(){
CC_SAFE_RELEASE(m__pMenu);
CC_SAFE_RELEASE(m__sfBackGround);
CC_SAFE_RELEASE(m__ltContentText);
CC_SAFE_RELEASE(m__ltTitle);
CC_SAFE_RELEASE(m__s9BackGround);
CC_SAFE_RELEASE(m__controlSlider);
}
bool PopupLayer::init(){
bool bRef = false;
do{
CC_BREAK_IF(!CCLayer::init());
this->setContentSize(CCSizeZero);
// 初始化需要的 Menu
CCMenu* menu = CCMenu::create();
menu->setPosition(CCPointZero);
setMenuButton(menu);
setTouchEnabled(true);
bRef = true;
}while(0);
return bRef;
}
void PopupLayer::registerWithTouchDispatcher(){
// 这里的触摸优先级设置为 -128 这保证了,屏蔽下方的触摸
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true);
}
bool PopupLayer::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
//
CCLog("PopupLayer touch");
return true;
}
PopupLayer* PopupLayer::create(const char *backgroundImage){
PopupLayer* ml = PopupLayer::create();
ml->setSpriteBackGround(CCSprite::create(backgroundImage));
ml->setSprite9BackGround(CCScale9Sprite::create(backgroundImage));
return ml;
}
// 新增
bool PopupLayer::addSlider(const char* sliderTrack, const char* sliderProgress, const char* slider_knob){
CCSprite* trackSp = CCSprite::create(sliderTrack);
CCSprite* progressSp = CCSprite::create(sliderProgress);
CCSprite* knobSp = CCSprite::create(slider_knob);
MySlider* slider = static_cast<MySlider*>(CCControlSlider::create(trackSp, progressSp, knobSp));
slider->setAnchorPoint(ccp(0.5f, 1.0f));
slider->setMinimumValue(0.0f);
slider->setMaximumValue(100.0f);
slider->setScale(1.8f);
slider->addTargetWithActionForControlEvents(this, cccontrol_selector(PopupLayer::valueChanged), CCControlEventValueChanged);
setControlSlider(slider);
return true;
}
void PopupLayer::valueChanged(CCObject* pSender, CCControlEvent controlEvent){
CCLOG("-----------------------------------Volumn");
// 拿到操作对象
MySlider* pSlider = (MySlider*)pSender;
float scale;
scale = pSlider->getValue();
CCLog("value = %f", scale);
}
最后是实现的代码,
// 音量调节弹出框
void MenuLayer::popupVolumnLayer(){
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
// 定义一个弹出层,传入一张背景图
PopupLayer* pl = PopupLayer::create("menuforml.png");
// ContentSize 是可选的设置,可以不设置,如果设置把它当作 9 图缩放
pl->setContentSize(CCSizeMake(350, 300));
// 添加slider
pl->addSlider("sliderTrack2.png", "sliderProgress2.png", "slider_knob.png");
// 添加到当前层
this->addChild(pl, 10);
}
实现CCControlSlider,却在模态窗口中不能触摸,该怎么办T_T