Ios CCNode作为CCScene Touch Handler cocos2d v3的子级

Ios CCNode作为CCScene Touch Handler cocos2d v3的子级,ios,cocos2d-iphone,Ios,Cocos2d Iphone,这件事我已经绞尽脑汁好一阵子了。我知道在cocos2dv3中,它发生了更改,因此只要设置contentSize并设置self.userInteractionEnabled=YES,CCNode就可以接受触摸 这对我不起作用。我有一个CCNode,作为子节点添加到CCScene中,但任何触摸都不会被注册 以下是CCNode代码: -(id) initWithPortName:(NSString *)portName andDesc:(NSString *)desc { self = [su

这件事我已经绞尽脑汁好一阵子了。我知道在cocos2dv3中,它发生了更改,因此只要设置
contentSize
并设置
self.userInteractionEnabled=YES
,CCNode就可以接受触摸

这对我不起作用。我有一个CCNode,作为子节点添加到CCScene中,但任何触摸都不会被注册

以下是CCNode代码:

-(id) initWithPortName:(NSString *)portName andDesc:(NSString *)desc {
    self = [super init];
    if (!self) return(nil);

    CGSize winSize = [[CCDirector sharedDirector] viewSize];

    self.contentSize = winSize;
    self.portName = portName;
    self.desc = desc;

    self.descLabel = [[CCRPGLabel alloc] initWithString:desc fontName:@"Arial" fontSize:18.0f dimensions:CGSizeMake(300, 150)];
    self.descLabel.color = [CCColor blackColor];
    self.descLabel.position = ccp(winSize.width/2, -200);

    [self addChild:self.descLabel];

    return self;
}

- (void) onEnter {
    self.userInteractionEnabled = YES;
    [super onEnter];
}

- (void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
    NSLog(@"here");
}
现场:

self.portNode = [[MainPort alloc] initWithPortName:@"Santa Maria Port" andDesc:@"This port is soweeeet"];
self.portNode.position = ccp(0, winSize.height);
self.portNode.contentSize = winSize;

[self addChild:self.portNode];

我没有得到
touchStart
函数的日志。我做错什么了吗?记住这是cocos2d v3,关于这个版本的文档还不多:(

在CCResponderManager.m touchesBegind内设置断点:withEvent:

它循环遍历所有启用了userInteractionEnabled的CCNode并检查命中率。您可以做的第一件事是查看您的目标CCNode是否在_responderList中。如果是,您可以跟踪该CCNode的hitTestWithWorldPos:并查看其返回false的原因。

我也有同样的问题。 在我的CCScene中,我使用[self addChild:map z:-1]添加CCNode*map;当我将z:option更改为0或更多时,我的touchStart函数会响应。
我不能很好地解释这一点,但现在它可以工作了。

读取的CCNode与场景是在同一个.m文件中还是在不同的文件中?如果您从不同的类文件中读取,可能会出现这种情况(我拿出了您的标题以简化您试图完成的任务):

标题:

#import "MainPort.h";
在你的现场:

CGSize screenSize = [[CCDirector sharedDirector]viewSize];
CCNode *santaMaria = [MainPort node];
santamaria.contentSize = screenSize;
[self addChild:santaMaria];
在主端口节点中:

- (void)onEnter
{
    [super onEnter];
    self.userInteractionEnabled = YES;
}

如果它在同一个类文件中,z顺序将决定哪个触摸应该首先注册,正如Dany指出的。z顺序越大,触摸优先级越高。

嘿,我也有同样的问题。你是如何解决这个问题的?谢谢