无法检测到 CCNode 上的触摸 - cocos2d v3.0

Posted

技术标签:

【中文标题】无法检测到 CCNode 上的触摸 - cocos2d v3.0【英文标题】:can't detect touch on CCNode - cocos2d v3.0 【发布时间】:2014-04-10 18:31:19 【问题描述】:

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

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

这是代码 --头文件

#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

这是 hello world 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;

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

【问题讨论】:

【参考方案1】:

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

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

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

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

- (void)onEnter 
    [super onEnter];

    self.userInteractionEnabled = TRUE;

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

【讨论】:

谢谢,成功了!我在哪里可以了解有关此类信息的更多信息,例如其他类的指定初始化程序? - 是 (id)initWithTexture:(CCTexture *)texture rect:(CGRect)rect 旋转:(BOOL)rotated; CCSprite 唯一指定的初始化器? @lionserdar : 在 cocos2d 0.9 到 2.1.x 版本中确实如此,但我不知道这个警告是否仍然适用于 3.0。 : 在覆盖任何 cocos 的 onSomething 方法时不要忘记 [super onSomething] ... @YvesLeBorg 谢谢,我确实忘记调用 [super onEnter]; @lionserdar 大部分都在 API 文档和头文件中。 MakeGamesWithUs 正在编写一份额外的文档,该文档将很快发布,涵盖所有这些主题! 是的,伙计们,我知道你们的作品。网站每天都有新的教程变得更好。在我深入研究 v3.0 之前,我回顾了你们拥有的东西。我认为如果你们也可以在教程结束时提供示例完成项目会更好。目标是否提供了一些提示和技巧?或完整的教程?谢谢。

以上是关于无法检测到 CCNode 上的触摸 - cocos2d v3.0的主要内容,如果未能解决你的问题,请参考以下文章

CCNode删除不起作用的Cocos2d

cocos2D----CCLayer

用另一个 CCSprite/CCNode 剪辑 CCSprite/CCNode - Cocos2D

无法在触摸上添加 Sprite - Cocos2d-x

quick-cocos2d-x游戏开发——单点触摸

COCOS2DX-LUA 脚本开发之六利用Lua强转函数解决使用CCNode报错或无法正常使用以及简单介绍 quick-cocos2d-x 与 OpenQuick 两款Lua免费开源框架