cocos2d-x 模態對話框的實現

本人最近使用2dx,發現在做多窗口布局的時候, 菜單和layer之間耦合度太高了,新建層以後, 還會響應底層的菜單事件,很是不人性化

所以把2DX的代碼改一下, 使其支持模態對話框,只響應當前層的菜單事件,不響應其它層的菜單事件!


具體改動如下:

1. CCLayer 中增加靜態變量:

通過這個變量表示當前模態層的窗口指針,用於進行判斷

static cocos2d::CCLayer* s_pModelessLayer;


2.CCMenu的  CCMenu::ccTouchBegan  方法, 增加以下代碼:

    if(CCLayer::s_pModelessLayer!=NULL)

    {

        bool bModelessParent = false;

        //如果模態對話框存在的話, 則判斷菜單項的父窗口, 在模態對話框中的菜單則響應, 否則忽略

        for (CCNode *c = this->m_pParent; c != NULL; c = c->getParent())

        {

            if (c==CCLayer::s_pModelessLayer)

            {

                bModelessParent = true;

                break;

            }

        }

        if(!bModelessParent)return false;

    }

代碼中有一次遍歷操作, 這樣便可在模態層中建立多級子窗口下的子菜單進行定位,正確響應這些菜單


3.具體使用:

有了以上兩步, 就可以簡單的通過設置變量s_pModelessLayer 進行模態對話框的操作了,如果想做的更OO一些,則可以建立一個自己的CCLayer子類, 並加入一個DoModal()方法,進行一次封裝便可以了, 然後在關閉窗口的地方把s_pModelessLayer設置成空就可以了。

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