无法检测到 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】:问题在于您没有覆盖CCSprite
subclass 中指定的初始化程序。如果您使用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的主要内容,如果未能解决你的问题,请参考以下文章
用另一个 CCSprite/CCNode 剪辑 CCSprite/CCNode - Cocos2D
COCOS2DX-LUA 脚本开发之六利用Lua强转函数解决使用CCNode报错或无法正常使用以及简单介绍 quick-cocos2d-x 与 OpenQuick 两款Lua免费开源框架