你可以重寫你的「載」節點hitTestWithWorldPos:
,要麼調用特定的兒童hitTestWithWorldPos
或者,通過所有的孩子迭代,你認爲合適。也許是這樣的:
-(BOOL) hitTestWithWorldPos:(CGPoint)pos
{
BOOL hit = NO;
hit = [super hitTestWithWorldPos:pos];
for(CCNode *child in self.children)
{
hit |= [child hitTestWithWorldPos:pos];
}
return hit;
}
編輯:僅僅是明確的,那麼你就只需要setUserInteractionEnabled
的容器,只是過程中使用含有節點的觸摸事件的觸摸。
edit2: 所以,我想了解更多,這裏有一個快速類別,你可以添加一個快速類別,以便遞歸地對節點的所有子節點進行快速命中測試。
CCNode + CCNode_RecursiveTouch.h
#import "CCNode.h"
@interface CCNode (CCNode_RecursiveTouch)
{
}
-(BOOL) hitTestWithWorldPos:(CGPoint)worldPos forNodeTree:(id)parentNode shouldIncludeParentNode:(BOOL)includeParent;
@end
CCNode + CCNode_RecursiveTouch.m
#import "CCNode+CCNode_RecursiveTouch.h"
@implementation CCNode (CCNode_RecursiveTouch)
-(BOOL) hitTestWithWorldPos:(CGPoint)worldPos forNodeTree:(id)parentNode shouldIncludeParentNode:(BOOL)includeParent
{
BOOL hit = NO;
if(includeParent) {hit |= [parentNode hitTestWithWorldPos:worldPos];}
for(CCNode *cnode in [parentNode children])
{
hit |= [cnode hitTestWithWorldPos:worldPos];
(cnode.children.count)?(hit |= [self hitTestWithWorldPos:worldPos forNodeTree:cnode shouldIncludeParentNode:NO]):NO; // on recurse, don't process parent again
}
return hit;
}
@end
使用也只是..包含類,覆蓋hitTestWithWorldPos這樣的:
-(BOOL) hitTestWithWorldPos:(CGPoint)pos
{
BOOL hit = NO;
hit = [self hitTestWithWorldPos:pos forNodeTree:self shouldIncludeParentNode:NO];
return hit;
}
當然,不要忘記包含類別標題。