我最近开始研究cocos2d v3.0。我正在尝试一些基本的东西,但是遇到了麻烦。

基本上,我将CCSprite子类化以创建Square对象。之后,将方形对象添加到我的HelloworldScene中,我想在我的Square精灵上收到触摸。由于某种原因,它不起作用。

这是代码
-头文件

#import "CCSprite.h"
@interface Square : CCSprite
@end

implementaion file

#import "Square.h"
#import "cocos2d.h"
@implementation Square
-(id)init {
    // Apple recommend assigning self with supers return value
    self = [super init];
    if (!self) return (nil);
    self.contentSize = [[CCDirector sharedDirector] viewSize];
    self.userInteractionEnabled = YES;
    return self;
}
-(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CCLOG(@"touch received");
}
@end


这是你好世界init方法

- (id)init
{
    // Apple recommend assigning self with supers return value
    self = [super init];
    if (!self) return(nil);

    Square *_square = [[Square alloc] initWithImageNamed:@"background.png"];
    [_square setPosition:CGPointZero];
    [self addChild:_square];
    // done
return self;
}


当我运行代码时,我可以在屏幕上看到精灵,但是当我点击它时,什么也没有发生,但触摸从未开始。我在这里想念什么?

最佳答案

问题在于您没有覆盖CCSprite子类中的指定初始化器。如果使用initWithImageNamed:初始化Sprite,则将永远不会调用您正在实现的init方法,并且永远不会激活触摸处理。您将必须覆盖的指定初始化程序为:

- (id)initWithTexture:(CCTexture *)texture rect:(CGRect)rect rotated:(BOOL)rotated;


那是保证每次初始化init时都会调用的唯一CCSprite方法。

无论哪种方式,我都建议在onEnter方法中打开触摸处理,该方法在场景中显示精灵时调用:

- (void)onEnter {
    [super onEnter];

    self.userInteractionEnabled = TRUE;
}


您可以在Cocos2D 3.0 here中找到有关触摸处理的完整教程。

关于ios - 在CCNode上无法检测到触摸-cocos2d v3.0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22996206/

10-14 22:02