我最近开始研究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/