Cocos2d-X 學習筆記 21 CCLayer響應手機按鍵

CClayer繼承了CCKeypadDelegate類,所以我們繼承CClayer,來重寫其中CCKeypadDelegate的兩個函數:


class CC_DLL CCKeypadDelegate
{
public:
    // The back key clicked
    virtual void keyBackClicked() {}


    // The menu key clicked. only available on wophone & android
    virtual void keyMenuClicked() {};
};




在Cocos2dx的CCLayer'類中,我們可以看到其中有一個 bool m_bKeypadEnabled;變量,此變量用來控制是否接受用戶的按鍵響應,CCLayer中有一個函數:


/// isKeypadEnabled setter
void CCLayer::setKeypadEnabled(bool enabled)
{
    if (enabled != m_bKeypadEnabled)
    {
        m_bKeypadEnabled = enabled;


        if (m_bRunning)
        {
            CCDirector* pDirector = CCDirector::sharedDirector();
            if (enabled)
            {
                pDirector->getKeypadDispatcher()->addDelegate(this);
            }
            else
            {
                pDirector->getKeypadDispatcher()->removeDelegate(this);
            }
        }
    }
}

可以看出,在CCDirector類中有一個   CCKeypadDispatcher對象的定義。

 /** CCKeypadDispatcher associated with this director
     @since v2.0
     */
    CC_PROPERTY(CCKeypadDispatcher*, m_pKeypadDispatcher, KeypadDispatcher);

然後調用這個對象註冊了一個delegate回調函數。所以當我們自定義的繼承至CClayer中,我們只需要一句代碼:

setKeypadEnabled();讓後重寫CCKeypadDelegate中的回調函數就可以實現自己響應的方法了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章