Cocos2d iphone Cocos2d:检查CCNode/CCSprite是否在显示列表上
在ActionScript中,我只需检查Cocos2d iphone Cocos2d:检查CCNode/CCSprite是否在显示列表上,cocos2d-iphone,cocos2d-x,Cocos2d Iphone,Cocos2d X,在ActionScript中,我只需检查显示对象的.stage属性,如果该属性为null,则显示对象不在显示列表中。是否有cocos2d等价物 我正在控制我自己的按钮触摸系统等,我想要一个快速的方式来忽略按钮注册,但实际上并没有在屏幕上。我目前正在检查可见的和父项,但这并不是一条完整的链,因此如果我在内存中有一个不可见/附加到任何内容的弹出窗口,并且该弹出窗口中有一个作为子项的按钮,则按钮检查将通过(因为它是可见的,并且有父项) 除了循环所有的节点直到场景,是否有一种简单的方法来检查显示列表上是
显示对象
的.stage
属性,如果该属性为null
,则显示对象不在显示列表中。是否有cocos2d等价物
我正在控制我自己的按钮触摸系统等,我想要一个快速的方式来忽略按钮注册,但实际上并没有在屏幕上。我目前正在检查可见的
和父项
,但这并不是一条完整的链,因此如果我在内存中有一个不可见/附加到任何内容的弹出窗口,并且该弹出窗口中有一个作为子项的按钮,则按钮检查将通过(因为它是可见的,并且有父项)
除了循环所有的节点直到场景,是否有一种简单的方法来检查显示列表上是否有CCNode/CCSprite
编辑
在@HariKrishna的回答中,这就是我提出的代码,因为cocos2d-x实现并不完全是我想要的(例如,如果节点的父节点为nil
,那么它将返回YES
,因为它永远不会进入检查):
您可以使用CCNode::isVisible()和CCControl::hasVisibleParents(),它们将在内部上升到所有节点层次结构
这是你用同样的方法能得到的最接近的结果
例如:
bool presentInDisplayList() {
if(isVisible() && hasVisibleParents())
return true;
else
return false;
}
其中hasVisibleParents()是(从Cocos2d-X库复制)
这可以很容易地转换为Objective-C您可以使用CCNode::isVisible()和CCControl::hasVisibleParents(),它们将在内部上升到所有节点层次结构
这是你用同样的方法能得到的最接近的结果
例如:
bool presentInDisplayList() {
if(isVisible() && hasVisibleParents())
return true;
else
return false;
}
其中hasVisibleParents()是(从Cocos2d-X库复制)
这可以很容易地转换为Objective-C几乎唯一的方法是在将menu.enabled属性推出视图时将其设置为NO,在其再次可见和可用时将其设置为YES。与父类(CCLayer)的.isTouchEnabled属性相比,更喜欢该属性。CCMenu随后将忽略任何触摸事件,而不会发送到基础菜单项(按钮)。afaik的cocos2d中没有“显示列表”这样的东西。我没有使用CCMenu
或CCMenuItem
,因为在我们的系统中,它对于我们的用例来说非常重,任何CCNode
都可以注册到TouchManager
中,因此每个对象都会对触摸位置执行命中测试-因此,如果CCNode
不在显示列表中,则需要快速退出。执行此操作的唯一方法是将menu.enabled属性设置为NO,然后将其推出视图,是的,当它再次变得可见和可用时。与父类(CCLayer)的.isTouchEnabled属性相比,更喜欢该属性。CCMenu随后将忽略任何触摸事件,而不会发送到基础菜单项(按钮)。afaik的cocos2d中没有“显示列表”这样的东西。我没有使用CCMenu
或CCMenuItem
,因为在我们的系统中,它对于我们的用例来说非常重,任何CCNode
都可以注册到TouchManager
,因此每个对象都会对触摸位置执行命中测试-因此,如果CCNode
不在显示列表中,则需要快速退出我猜hasVisibleParents()
仅在cocos2d-x中,因为它似乎不存在于cocos2d iphone中:/-它是否会在到达场景时自动停止检查(因为场景的父级
为null
)?是的,它将在场景中停止。。您还可以为hasVisibleParents()编写方法。。检查修改后的答案…所以我开始实施这个问题-看我修改后的问题-我必须更改代码,因为这对我所寻找的东西不起作用:D-如果父项为NULL
,那么它将返回true
。如果您检查null
,那么它将始终返回false
,因为场景没有父对象我猜hasVisibleParents()
仅在cocos2d-x中,因为它在cocos2d iphone中似乎不存在:/-它到达场景时会自动停止检查吗(由于场景的父项
为null
)?是的,它将在场景中停止。此外,您还可以为hasVisibleParents()编写方法…检查修改后的答案…所以我开始实施这个-看我修改后的问题-我必须更改代码,因为这对我所寻找的东西不起作用:D-如果父项为NULL
,那么它将返回true
。如果检查NULL
,那么它将返回false
a所有时间,因为场景
没有父对象
bool CCControl::hasVisibleParents()
{
CCNode* pParent = this->getParent();
for( CCNode *c = pParent; c != NULL; c = c->getParent() )
{
if( !c->isVisible() )
{
return false;
}
}
return true;
}