gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:10:40 26 4
gpt4 key购买 nike

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

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

代码如下--头文件

#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;
}

当我运行代码时,我可以在屏幕上看到 Sprite ,但是当我点击它时没有任何反应,触摸开始永远不会被调用。我在这里错过了什么?

最佳答案

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

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

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

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

- (void)onEnter {
[super onEnter];

self.userInteractionEnabled = TRUE;
}

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com