我有一个从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中移除......
任何帮助都很受欢迎!
答案 0 :(得分:3)
如果我没记错[CCTouchDispatcher sharedDispatcher]
保留其委托,那么你的dealloc永远不会被调用。
你必须在其他地方调用[[CCTouchDispatcher sharedDispatcher] removeDelegate:self]
这样做,你的精灵将被正确释放。
通常将委托定义为赋值,这种不寻常的行为应该更好地记录