1

我有一个处理触摸事件的CCLayer子类:MyLayer

(BOOL) ccTouchBegan:(UITouch *) touch withEvent:(UIEvent *) event

MyLayer我这样设置实例的内容大小:

`myLayer.contentSize = CGSizeMake(30.0, 30.0);`

然后我将MyLayer实例添加为ParentLayer. 出于某种原因,我可以点击屏幕上的任何位置MyLayer,并且一个实例会检测到点击。我只想检测可见部分/内容大小的点击。我怎样才能做到这一点?

这些MyLayer实例是否以某种方式从其他地方继承了“可点击区域”?我已经验证了contentSize刚刚点击的实例的(30, 30)符合预期。也许 contentSize 不是指定CCLayer子类的可点击区域的方法。

4

1 回答 1

4

当在特定 CCLayer 上启用触摸时,它会接收窗口中的所有触摸事件。话虽如此,如果有多个层,所有层都会收到相同的触摸。

为了缓解这种情况,从 UITouch 中获取位置,将其转​​换为 Cocos2d 坐标,然后检查它是否在您关注的图层的范围内。

这是一些可以使用的代码:

CCLayer * ccl = [[CCLayer alloc] init];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
if (CGRectContainsPoint(CGRectMake(ccl.position.x - ccl.contentSize.width/2, ccl.position.y - ccl.contentSize.height/2, ccl.contentSize.width, ccl.contentSize.height), location)) {
   //continue from there...
}
于 2012-04-15T02:47:18.413 回答