2011-11-24 21 views
1

刪除觸摸我有一個類從實現CCTargetedTouchDeledate像這樣CCSprite擴展:從CCSprite與CCTouchDispatcher

@interface PianoKey : CCSprite <CCTargetedTouchDelegate> { 

} 

這具有與上述CCTouchDispatcher以下方法:

-(void) onEnter { 
    [super onEnter]; 
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:INT_MIN+1 swallowsTouches:YES]; 
} 

-(void) dealloc { 
    [[CCTouchDispatcher sharedDispatcher] removeDelegate:self]; 
    [super dealloc]; 
} 

而且也有標準方法CCTouchesBegan等。這個想法是通過讓每臺鋼琴在觸摸調度器中註冊來模擬多點觸摸。

這一切都很好,除了當我改變到一個新的場景。這些鋼琴鍵的觸摸仍在註冊,並將優先於新場景中的菜單項等。所以看起來精靈並沒有被從CCTouchDispatcher中刪除...

任何幫助都很受歡迎!

+0

我會就在想,我可以創建一個類從CCLayer的繼承和包含CCSprite,匹配精靈尺寸層?這可能會更容易... – Alex

回答

3

如果我記得正確[CCTouchDispatcher sharedDispatcher]保留其委託,所以你的dealloc永遠不會被調用。 你必須在其他地方調用[[CCTouchDispatcher sharedDispatcher] removeDelegate:self],這樣做你的精靈將被正確釋放。

通常代表被定義爲分配,這種不尋常的行爲,應更好地記錄

+1

- (void)cleanup {}是這種保留的代表應該被刪除的方法。同意這應該被記錄,通常代表不會被保留,但在這裏他們是因爲他們被添加到一個NSMutableArray。 – LearnCocos2D

+0

謝謝你們, - (void)cleanup {}完美地工作。 – Alex