CCNode作为CCScene Touch Handler cocos2d v3的子代

时间:2014-02-23 23:45:36

标签: ios cocos2d-iphone

我一直在打扰这一段时间。我知道在cocos2d v3中它已更改,只要您设置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");
}

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,关于这个版本的文档还不多:(

3 个答案:

答案 0 :(得分:2)

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

它遍历所有具有userInteractionEnabled的CCNode并检查命中。您可以做的第一件事是查看您的目标CCNode是否在_responderList中。如果是,你可以追踪到hitTestWithWorldPos:对于那个CCNode,看看为什么它返回false。

答案 1 :(得分:2)

我遇到了同样的问题。 在我的CCScene中,我使用[self addChild:map z:-1]添加CCNode * map;当我将z:option更改为0或更多时,我的touchBegan功能会响应。 我不太好解释,但现在它有效。

答案 2 :(得分:0)

CCNode是在同一个.m文件中读取还是在场景中读取?如果您正在阅读不同的类文件,那么这就是它的样子(我拿出了你的标题来简化你想要完成的事情):

头:

#import "MainPort.h";

在您的现场:

CGSize screenSize = [[CCDirector sharedDirector]viewSize];
CCNode *santaMaria = [MainPort node];
santamaria.contentSize = screenSize;
[self addChild:santaMaria];
您的MainPort节点中的

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

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