我已经为此打了一段时间。我知道在cocos2d v3中它已更改,因此CCNode可以接受触摸,只要您设置contentSize和set self.userInteractionEnabled = YES即可。

这对我不起作用。我有一个作为 child 添加到CCScene的CCNode,但是任何触摸都没有注册。

这是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");
}

和CCScene:
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];

我没有touchBegan函数的日志。难道我做错了什么?记住这是cocos2d v3,这个版本还没有很多文档:(

最佳答案

在CCResponderManager.m中设置一个断点。touchesBegan:withEvent:

它遍历所有具有userInteractionEnabled的CCNode并检查命中。您可以做的第一件事是查看目标CCNode是否在_responderList中。如果是这样,则可以跟踪该CCNode的hitTestWithWorldPos:并查看其为什么返回false。

10-07 12:27