cocos2d scrollview上面添加按钮 50

我在scrollview的item上面添加按钮,当item滑动到scrollview的可视范围之外的时候,我在scrollview可视范围外面点击原本已经隐藏的item上... 我在scrollview的item上面添加按钮,当item滑动到scrollview的可视范围之外的时候,我在scrollview可视范围外面点击原本已经隐藏的item上面的按钮,按钮仍然能接收到点击事件,这是什么原因引发的,有何好的解决方案。 展开
 我来答
hujieee
2014-07-30 · TA获得超过158个赞
知道小有建树答主
回答量:99
采纳率:0%
帮助的人:85.1万
展开全部
且看 CCMenu 的touchbegan函数:

bool CCMenu::ccTouchBegan(CCTouch* touch, CCEvent* event)

{

CC_UNUSED_PARAM(event);

if (m_eState != kCCMenuStateWaiting || ! m_bVisible || !m_bEnabled)

{

return false;

}

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

{

if (c->isVisible() == false)

{

return false;

}

}

m_pSelectedItem = this->itemForTouch(touch);

if (m_pSelectedItem)

{

m_eState = kCCMenuStateTrackingTouch;

m_pSelectedItem->selected();

return true;

}

return false;

}

touchbegan时响应点击事件的一部分因素在于那个for循环,只有当前menu的所有父节点可见时,才能继续响应点击事件。

除此之外,当该menu可见时,那么该menu就会遍历左右的children,且看

CCMenuItem* CCMenu::itemForTouch(CCTouch *touch)

{

CCPoint touchLocation = touch->getLocation();

if (m_pChildren && m_pChildren->count() > 0)

{

CCObject* pObject = NULL;

CCARRAY_FOREACH(m_pChildren, pObject)

{

CCMenuItem* pChild = dynamic_cast<CCMenuItem*>(pObject);

if (pChild && pChild->isVisible() && pChild->isEnabled())

{

CCPoint local = pChild->convertToNodeSpace(touchLocation);

CCRect r = pChild->rect();

r.origin = CCPointZero;

if (r.containsPoint(local))

{

return pChild;

}

}

}

}

return NULL;

}

当且仅当 if (pChild && pChild->isVisible() && pChild->isEnabled()) Child存在 可见 使能 时就会响应对应的点击时间。

于是,又根据cocos2d touch事件的分发规则,先响应优先级高的layer,然后menu就先响应点击了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式