我有一个用作暂停菜单的CCLayer。它占据了整个屏幕,但目前允许触摸通过它。
我想阻止触摸通过它,但我有一点困难。这就是我所拥有的:
-(id)init{
if(self = [super init]){
CGSize s = [[CCDirector sharedDirector] winSize];
self = [CCLayerColor layerWithColor: ccc4(11, 153, 223, 255) width: s.width height: s.height];
self.position = CGPointZero;
self.isTouchEnabled = YES;
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}
return self;
}然而,接触到这一层会导致崩溃,但似乎也能穿过它。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Layer#ccTouchBegan override me'什么是最简单的方法来防止触摸通过这个粘土层?谢谢
发布于 2012-06-20 15:43:37
在添加层作为目标触摸代理之后,您必须实现CCTargetedTouchDelegate方法。至少
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event此方法是必需的。其他是可选的。而且你不应该以这种方式添加层作为触摸代理。CCLayer类中有一个方法
- (void) registerWithTouchDispatcher覆盖它,并将您的行放在那里
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];如果你想在一段时间内通过这一层传递数据,你可以写下这一行
[myLayer setIsTouchEnabled: NO];或者,如果您想在某些rect中捕获触点,则必须在ccTouchBegan:withEvent:方法中实现您的逻辑。如果此方法返回NO,则此触摸可由任何其他触摸委托处理。如果此方法返回YES,则此触摸将不会传递给任何其他触摸委托
发布于 2012-06-20 15:36:24
基本上,所有的cocos2d层都在一个单一的UIView中,所有的接触都不是这个层,而是这个UIView。为了防止接触,你可以尝试从CCTouchDicpatcher中删除委托,将图层的isTouchEnabled属性设置为NO。
https://stackoverflow.com/questions/11114316
复制相似问题