2011-11-24 47 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