.h文件中,首先需要创建一个触摸协议,分别添加began,moved,ended方法,设为纯虚函数,用来继承实现。
//触摸代理协议
class TouchDelegate
{
public:
virtual void onBegan(Touch* touch,Event* event) = 0;
virtual void onMoved(Touch* touch,Event* event) = 0;
virtual void onEnded(Touch* touch,Event* event) = 0;
};
接下来创建触摸代理类,初始化并添加触摸。设置代理实现方法。
//触摸代理类
class TouchLayer : public Layer
{
public:
TouchLayer();
~TouchLayer();
virtual bool init();
CREATE_FUNC(TouchLayer);
public:
bool onTouchBegan(Touch* touch,Event* event);
void onTouchMoved(Touch* touch,Event* event);
void onTouchEnded(Touch* touch,Event* event);
CC_SYNTHESIZE(TouchDelegate*, delegator, Delegator);
};
bool TouchLayer::init()
{
if (!Layer::init()) {
return false;
}
//添加触摸事件监听
auto dispatcher = Director::getInstance()->getEventDispatcher();
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(false);
listener->onTouchBegan = CC_CALLBACK_2(TouchLayer::onTouchBegan, this);
listener->onTouchMoved = CC_CALLBACK_2(TouchLayer::onTouchMoved, this);
listener->onTouchEnded = CC_CALLBACK_2(TouchLayer::onTouchEnded, this);
dispatcher->addEventListenerWithSceneGraphPriority(listener,this);
return true;
}
bool TouchLayer::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event)
{
this->delegator->onBegan(touch,event);
return true;
}
void TouchLayer::onTouchMoved(Touch* touch,Event* event)
{
this->delegator->onMoved(touch, event);
}
void TouchLayer::onTouchEnded(Touch* touch,Event* event)
{
this->delegator->onEnded(touch,event);
}
//游戏显示层
auto gameLayer = new GameLayer(_data);
gameLayer->autorelease();
scene->addChild(gameLayer,2);
//游戏触摸事件层
auto touchLayer = TouchLayer::create();
touchLayer->setDelegator(gameLayer);
scene->addChild(touchLayer,1);