升级到cocos2d-x 3.10之后被遗忘的ccui.PageView.pageTurningEvent()

项目升级到cocos2d-x 3.10,本想着一切顺利,但调试了一把发现PageView的翻页事件不正常了,代码如下:

    local pageViewEvent = function(sender, eventType)
        if eventType == ccui.PageViewEventType.turning then
            local curPage = self.pageview:getCurrentPageIndex()
            self.btnPrev:setVisible(curPage > 0)
            self.btnNext:setVisible(curPage < kTotalPages - 1)
        end
    end
    self.pageview:addEventListener(handler(self, self.pageViewEvent))

本意是在翻页的时候调用一下pageViewEvent,更新ui事件。但实际运行却没有更新。加了日志,发现函数没有被调用,这就奇怪了,看来问题极有可能出现在引擎内部,于是打开UIPageView.cpp,果然发现问题。

之前的cocos2d-x版本里,会在翻页的时候调用pageTurningEvent(),该函数内部会调用lua端注册的事件处理函数,放到上面的例子,即pageViewEvent。但在cocos2d-x 3.10里,该函数似乎被忘记调用了,查找整个cocos2dx源码,无一处调用该函数。对比新旧版本,PageView的基类由Layout调整为了ListView,也许在这次改动之中漏掉了对翻页的处理。

在官方更新之前,只好暂时自行补救一下了。


/*
 * UIScrollView.h
 */

 class UIScrollView : public Layout {
 ...
 protected:
 // 添加函数声明
 virtual void autoScrollBegin(){}
 }

/*
 * UIScrollView.cpp
 */
void ScrollView::startAutoScroll(const Vec2& deltaMove, float timeInSec, bool attenuated)
{
    ...
    // 函数末尾添加调用
    autoScrollBegin();
}

/*
 * UIPageView.h
 */

class PageView {
...
protected:
    // 添加声明
    virtual void autoScrollBegin() override;
}

/*
 * UIPageView.cpp
 */

// 添加实现,调用pageTurningEvent()
void PageView::autoScrollBegin()
{
    pageTurningEvent();
}

这样翻页时就可以正常通知到lua端了。

你可能感兴趣的:(C++,lua,cocos2d-x)