cococos 2 d-x 3.10にアップグレード後に忘れられたccui.PageView.pageTurningEvent()


プロジェクトはcococos 2 d-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を開くと、やはり問題が見つかりました.
以前のcococos 2 d-xバージョンでは、ページをめくるときにpageTurningEvent()が呼び出され、この関数の内部でlua側に登録されたイベント処理関数が呼び出され、上の例であるpageViewEventが置かれていました.しかし、cococos 2 d-x 3.10では、この関数が呼び出されるのを忘れたようで、cocos 2 dxソースコード全体を検索し、この関数を呼び出す場所はありません.新旧バージョンと比較すると、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端に通知されます.