你如何在Cocos2D V3上检测CCScene中的触摸?

时间:2014-02-19 02:46:36

标签: ios objective-c cocos2d-iphone touch

我知道您以前可以通过以下方式完成:

<CCLayerObject>.isTouchEnabled = YES;

...与触摸调度员的注册相结合:

-(void)registerWithTouchDispatcher
{
    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}

...然后获得回调:

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint point = [self convertTouchToNodeSpace:touch];
    NSLog(@"X:%ftY:%f", point.x, point.y);
}

但你在V3中需要做什么?

2 个答案:

答案 0 :(得分:4)

看起来我所要做的就是:

在CCScene构造函数中,启用touches:

[self setUserInteractionEnabled:YES];

在以下位置添加touchBegan方法:

- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
    NSLog(@"touchBegan");
}

钽哒!在V3中比在V2中容易得多!

或者,也可以:

[self setMultipleTouchEnabled:YES];

答案 1 :(得分:3)

在Cocos2d 3.0中,任何CCNode都可以接收触摸。您需要做的就是启用触摸:

self.userInteractionEnabled = YES;

然后你有四种不同的方法来处理触摸:

  • touchBegan :在用户触摸屏幕时调用

  • <强> touchMoved:: 当用户将手指移到屏幕上时会被调用

  • touchEnded :在用户停止触摸屏幕时调用

  • touchCancelled :当用户仍在触摸屏幕时调用 但是其他一些问题阻止了您的Node处理触摸(例如, 触摸移动到节点的边界之外)

将触摸转换为节点空间的方式如下:

- (void)touchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint touchLocation = [touch locationInNode:self];
    currentHero.position = touchLocation;
}

您可以在此触摸教程中阅读更多内容:https://makegameswith.us/gamernews/366/touch-handling-in-cocos2d-30