在 ActionScript 中,我可以只检查.stage
a 的属性DisplayObject
,如果是null
,DisplayObject
则不在显示列表中。是否有 cocos2d 等价物?
我正在控制自己的按钮等触摸系统,并且我想要一种快速的方法来忽略已注册但实际上不在屏幕上的按钮。我目前正在检查visible
and parent
,但这并没有一路向上,所以如果我在内存中有一个不可见/附加到任何东西的弹出窗口,并且在该弹出窗口中有一个作为子项的按钮,则按钮检查将通过(因为它是可见的并且有父级)。
除了循环所有直到场景之外,是否有一种简单的方法可以检查 aCCNode/CCSprite
是否在显示列表中?
编辑
处理@HariKrishna 的答案,这是我想出的代码,因为 cocos2d-x 实现并不是我想要的(例如,如果parent
节点的 是nil
,那么它将返回YES
,因为它永远不会进入检查) :
- (BOOL) hasVisibleParents
{
CCNode * p = self.parent;
while( true )
{
if( p == nil || !p.visible )
return NO;
if( [p isKindOfClass:[CCScene class]] )
return YES;
p = p.parent;
}
return YES;
}