在ActionScript中,我只需检查.stage
的{{1}}属性,如果它是DisplayObject
,则null
不在显示列表中。是否有cocos2d等效?
我正在控制我自己的触摸系统按钮等,我想快速忽略已注册但实际上不在屏幕上的按钮。我目前正在检查DisplayObject
和visible
,但这并不会一直向上,所以如果我在内存中有一个弹出窗口,它不可见/附加到任何东西,并且按钮作为弹出窗口内的一个孩子,按钮检查将通过(因为它是可见的并且有父母)。
除了将所有内容循环到场景之外,还有一种简单的方法可以检查显示列表中是否有parent
吗?
修改
使用@ HariKrishna的答案,这是我提出的代码,因为cocos2d-x实现并不是我想要的(例如,如果节点的CCNode/CCSprite
是parent
,然后它将返回nil
,因为它永远不会进入支票):
YES
答案 0 :(得分:1)
您可以使用CCNode :: isVisible()和CCControl :: hasVisibleParents(),它将在内部进入所有节点层次结构......
这是你能得到的最接近的。
示例:
bool presentInDisplayList() {
if(isVisible() && hasVisibleParents())
return true;
else
return false;
}
hasVisibleParents()的位置,(从Cocos2d-X库复制)
bool CCControl::hasVisibleParents()
{
CCNode* pParent = this->getParent();
for( CCNode *c = pParent; c != NULL; c = c->getParent() )
{
if( !c->isVisible() )
{
return false;
}
}
return true;
}
这可以很容易地转换为Objective-C