2012-06-20 130 views
1

我有一個CCLayer,我用它作爲暫停菜單。它佔據了整個屏幕,但目前允許觸摸通過它。防止觸摸通過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' 

什麼是最簡單的方法來防止觸摸通過此cclayer?謝謝

回答

0

基本上,所有的cocos2d圖層都在一個,sigle UIView,所有的觸摸都不是這個圖層,而是由這個UIView。 爲了防止觸摸,您可以嘗試從CCTouchDicpatcher,集合層的isTouchEnabled屬性中刪除代理到NO

4

將圖層添加爲目標touch委託後,您必須實現CCTargetedTouchDelegate方法。至少

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

此方法是必需的。其他是可選的。而且您不應該以這種方式添加圖層作爲觸摸代理。目前在CCLayer類中的方法

- (void) registerWithTouchDispatcher 

覆蓋它和地方在那裏,你行

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; 

如果你想通過這層在一段時間內通過觸摸,你可以只寫這行

[myLayer setIsTouchEnabled: NO]; 

或者,如果您想在某些矩形中捕捉觸摸,則必須在ccTouchBegan:withEvent:方法中實現您的邏輯。如果此方法返回NO,則此觸摸可以由任何其他觸摸代理處理。如果此方法返回YES,此觸摸將不會傳遞給任何其他觸摸代理

+1

我認爲sharedDispatcher已折舊,我切換到此:[[CCDirector sharedDirector] touchDispatcher] – Muskie