在CCLayer子类上点击检测有问题

时间:2012-04-15 02:33:53

标签: cocoa-touch cocos2d-iphone subclass cclayer

我有一个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子类的可点击区域的方法。

1 个答案:

答案 0 :(得分: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...
}