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