上周在使用Cocos2dx 3.10游戏引擎的时候发现一个问题,pageView中的addEventListenerPageView函数怎么也监听不到,因为我想在滑动的时候监听到当前的是第几个page。在网上搜了好多博客,整理了一下今天分享给大家~~
首先看cocos/ui/UIPageView.cpp中的addEventListener函数
原函数是这样实现的:
void PageView::addEventListener(const ccPageViewCallback& callback){
_eventCallback = callback;
}
//修改如下:
void PageView::addEventListener_pageView(const ccPageViewCallback& callback)
{
_eventCallback = callback;
ccScrollViewCallBack scrollViewCallback = [=] (Ref* ref, ScrollView::EventType type)->void{
if (type == ScrollView::EventType::AUTOSCROLL_ENDED)
{
callback(ref, PageView::EventType::TURNING);
}
};
this->addEventListener(scrollViewCallback);
}
注: 函数名为自己定义
其次在cocos/ui/UIPageView.h中
修改如下:
将原来的addEventListener函数注释掉,修改为addEventListener_pageView函数,参数不变,然后紧接着在下面写上这两句:
CC_DEPRECATED_ATTRIBUTE void addEventListener(const ccPageViewCallback& callback);
using ScrollView::addEventListener;
在cocos/ui/UIScrollView.cpp的538行中加入如下代码:
//在scrollVeiw的processAutoScrolling函数中末尾判断句 if(reachedEnd)中修改如下:
// Finish auto scroll if it ended
if(reachedEnd)
{
_autoScrolling = false;
//------add
dispatchEvent(SCROLLVIEW_EVENT_AUTOSCROLL_ENDED, EventType::AUTOSCROLL_ENDED);
}
在cocos/ui/UIScrollView.h的ScrollviewEventType的结构体最后加入:
SCROLLVIEW_EVENT_AUTOSCROLL_ENED
在.h的枚举类EventType中加入:
AUTOSCROLL_ENDED
至此,在游戏中调用addEventListener_pageView函数就能成功监听到滑动到第几个page了。