COCOS2DX 3.X 解決TABLEVIEW 、SCROLLVIEW上的MENU問題

    本站文章均爲     羅漢果 cocos2d-x技術博客     原創,轉載務必在明顯處註明:    
轉載自     【羅漢果 cocos2d-x技術博客】 原文連接: http://tech.pigsns.com/thread-228-1-1.html
 html

問題有兩個(我主要解決的就這兩個)最近在作霸氣三國的項目圖片都是從網上拔下來的 之前也有這樣的狀況 只是開始都是學習怎麼用  工做兩年了 沒有真正的鑽研過什麼都是在如何用上花費時間node

1滑出View區域還可點擊函數

2致使點擊menu後View不能滑動)學習

第一個問題我是改了menu的源碼 添加了 幾個函數 判斷函數 原理就是this

判斷touch事件的觸摸點是否是在TableView 、ScrollView上來返回false仍是truespa

直接上代碼code

//luohanguo
void Menu::setTouchlimit(cocos2d::Node *node)
{
    m_szTouchLimitNode=node;
    m_bTouchLimit=true;
}
bool Menu::isInTouchLimit(Touch* touch)
{
    if(m_bTouchLimit)
    {
        Vec2 touchLocation = touch->getLocation();
        
        Vec2 local = m_szTouchLimitNode->convertToNodeSpace(touchLocation);
        Rect r = m_szTouchLimitNode->getBoundingBox();
        r.origin = Vec2::ZERO;
        
        if (!r.containsPoint(local))
        {
            return true;
        }
    }
    return false;
}
//luohanguo

在onTouchBeganorm

bool Menu::onTouchBegan(Touch* touch, Event* event)
{
    if (_state != Menu::State::WAITING || ! _visible || !_enabled)
    {
        return false;
    }
    
    for (Node *c = this->_parent; c != nullptr; c = c->getParent())
    {
        if (c->isVisible() == false)
        {
            return false;
        }
    }
    //luohanguo
    if(isInTouchLimit(touch))
    {
        return false;
    }
    //luohanguo
    _selectedItem = this->getItemForTouch(touch);
    if (_selectedItem)
    {
        _state = Menu::State::TRACKING_TOUCH;
        _selectedItem->selected();
        
        return true;
    }
    
    return false;
}

在使用過程當中htm

itemMenu->setTouchlimit(zhuFangTableView)事件

把當前的TableView 、ScrollView傳過去就好了。

 

第二個問難我只是簡單的處理了下

 auto touchListener = EventListenerTouchOneByOne::create();

       //修改menu的優先級事件向下層傳遞

touchListener->setSwallowTouches(false);

沒有處理多點觸摸 若是有須要的同窗能夠本身添加

以上內容我只作記錄 沒有通過長期的實戰考驗 可能不是完美的解決方案。但願大神能指點一二 。

 

  還要感謝你們對James的我的博客的支持: 

                         James開發街區:tech.pigsns.com

相關文章
相關標籤/搜索