使用CCTouchDispatcher从CCSprite中删除触摸

时间:2011-11-24 14:42:50

标签: iphone cocos2d-iphone touch

我有一个从CCSprite扩展的类,它实现了CCTargetedTouchDeledate,如下所示:

@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中移除......

任何帮助都很受欢迎!

1 个答案:

答案 0 :(得分:3)

如果我没记错[CCTouchDispatcher sharedDispatcher]保留其委托,那么你的dealloc永远不会被调用。 你必须在其他地方调用[[CCTouchDispatcher sharedDispatcher] removeDelegate:self]这样做,你的精灵将被正确释放。

通常将委托定义为赋值,这种不寻常的行为应该更好地记录