Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios can';t在CCNode上检测触摸-cocos2d v3.0_Ios_Objective C_Cocos2d Iphone - Fatal编程技术网

Ios can';t在CCNode上检测触摸-cocos2d v3.0

Ios can';t在CCNode上检测触摸-cocos2d v3.0,ios,objective-c,cocos2d-iphone,Ios,Objective C,Cocos2d Iphone,我最近开始探索cocos2dv3.0。我正在尝试一些基本的东西,但遇到了一些麻烦 基本上,我正在子类化一个CCSprite来创建正方形对象。在那之后,将方形对象添加到我的HelloWorld场景中,我想在我的方形精灵上获得触摸。由于某种原因,它不起作用 这是密码 --头文件 #import "CCSprite.h" @interface Square : CCSprite @end implementaion file #import "Square.h" #import "cocos2d.

我最近开始探索cocos2dv3.0。我正在尝试一些基本的东西,但遇到了一些麻烦

基本上,我正在子类化一个CCSprite来创建正方形对象。在那之后,将方形对象添加到我的HelloWorld场景中,我想在我的方形精灵上获得触摸。由于某种原因,它不起作用

这是密码 --头文件

#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
下面是helloworld
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:
初始化精灵,将永远不会调用您正在实现的
init
方法,也永远不会激活触摸处理。您必须覆盖的指定初始值设定项为:

- (id)initWithTexture:(CCTexture *)texture rect:(CGRect)rect rotated:(BOOL)rotated;
这是保证每次初始化
CCSprite
时调用的唯一
init
方法

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

- (void)onEnter {
    [super onEnter];

    self.userInteractionEnabled = TRUE;
}

您可以在cocos2d3.0中找到有关触摸处理的完整教程。

谢谢,这很有效!我在哪里可以了解更多关于此类信息的信息,比如其他类的指定初始值设定项是(id)initWithTexture:(CCTexture*)texture rect:(CGRect)rect rotated:(BOOL)rotated;CCSprite唯一指定的初始值设定项?@lionserdar:这在cocos2d版本0.9到2.1.x中是正确的,但我不知道这个警告是否仍然适用于3.0:当覆盖任何cocos的onSomething方法时,不要忘记[super-onSomething]。@YvesLeBorg谢谢,我确实忘记了调用[super-Oneter]@lionserdar大部分内容都在API文档和头文件中。MakeGamesWithUs正在编写一份即将发布的附加文档,该文档将涵盖所有这些主题!是的,我知道你们的作品。随着新教程的出现,网站每天都在变得更好。在我深入研究v3.0之前,我浏览了你们的作品。我认为,如果你们能在教程结束时提供示例完成项目,那就更好了。目标是否提供了一些提示和技巧?还是完整的教程?谢谢