反向遮罩的点击功能问题

cocos2dx,我对一个组件A使用反向遮罩,A中被遮罩隐藏掉的组件还是会接收到点击效果

企业微信截图_15917568254958.png


企业微信截图_15917562838073.png


企业微信截图_15917565274716.png


企业微信截图_15917568833453.png


企业微信截图_15917569551830.png

 
已邀请:

谷主

赞同来自:

先记录下,以后查查

canyuexueying

赞同来自:

这个问题是个bug,  原因是 Gcomponet 中的 maskOwner 一旦设置后会从子类中移除
                _maskOwner = child;
                if (value->getParent())
                    value->getParent()->removeChild(value, false);
但是在做碰撞检测时,又采用了通用的hitTest 判断了父对象是否存在 所以导致点击遮罩 被忽略了,进行了后续容器hitTest 

GObject* GObject::hitTest(const Vec2& worldPoint, const Camera* camera)
{
    if (_touchDisabled || !_touchable || !_displayObject->isVisible() || !_displayObject->getParent())
        return nullptr;

    Rect rect;
    rect.size = _size;
    //if (isScreenPointInRect(worldPoint, camera, _displayObject->getWorldToNodeTransform(), rect, nullptr))
    if (rect.containsPoint(_displayObject->convertToNodeSpace(worldPoint)))
        return this;
    else
        return nullptr;
}
 
解决方案,新增一个 hitMaskTest 来 区别正常的 hitTest 

要回复问题请先登录注册