1、.h文件需要虚继承父类的onTouchBegan、onTouchMoved onTouchEnded onTouchCancelled,如果需要添加自己实现的内容,到cpp文件实现,如果不实现,直接到头文件加上{}
virtual bool onTouchBegan(Touch* touch, Event *unused_event);
virtual void onTouchMoved(Touch* touch, Event *unused_event){};
virtual void onTouchEnded(Touch* touch, Event *unused_event){};
virtual void onTouchCancelled(Touch *touch, Event *unused_event){};
2、到cpp文件创建监听
//触摸响应注册
auto touchListener = EventListenerTouchOneByOne::create();//创建单点触摸事件监听器
touchListener->setSwallowTouches(true);//不向下传递触摸
touchListener->onTouchBegan = CC_CALLBACK_2(GameLayer::onTouchBegan,this);//触摸开始
touchListener->onTouchMoved = CC_CALLBACK_2(GameLayer::onTouchMoved,this);//触摸移动
touchListener->onTouchEnded = CC_CALLBACK_2(GameLayer::onTouchEnded,this);//触摸结束
_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener,this;//注册分发器
3、实现自己的逻辑代码
bool GameLayer::onTouchBegan(Touch* touch, Event* event) {
//实现自己的逻辑代码
return true;//onTouchBegan()函数中返回true,则响应事件不会向下层传递,只会响应本层中的Began、Moved、Ended三个函数,如果返回false,则本层后续的Moved、Ended函数不会被触发,但是事件会向下层传递。
}
4、注意事项
当一个事件监听器需要重复利用时,需要用clone()方法创建一个新的克隆,因为在使用addEventListenerWithSceneGraphPriorith或者addEventListenerWithFixedPriority方法进行注册时,会对当前使用的事件监听器添加一个已注册的标记,这使得它不能够被添加多次。另外,再使用FixedPriority listeners时,添加完之后需要手动remove,SceneGraphyPriority listener和Node绑定,在Node的析构函数中会被移除。
移除一个已注册的监听器用
_eventDispatcher->removeEventListener(listener);
也可以直接调用removeAllListeners函数,但是不建议这么做,这样做之后所有的事件监听器都不再响应。