最近学习Cocos2d-x开发游戏,实现了一个类,继承自CCSprite和CCTouchDelegate,实现了触摸事件,出现了一个问题就是:在该实例调用removeFromParentAndCleanup(true)方法后,该精灵已经从屏幕上移除,但是点击该精灵原来的位置时,程序会出错。经检查是虽然精灵从屏幕上移除了但,触摸事件并没有移除,导致触发触摸时,仍运行了精灵注册的事件,最后导致了程序的崩溃!
解决的方法也很简单,在移除精灵时,也注销事件。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
void Block::onEnter() { CCSprite::onEnter(); CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,false);//注册事件 } void Block::onExit() { CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);//移除事件 CCSprite::onExit(); }
出现问题后,在网上找不到这个问题的答案,倒是搜到一个相同的问题,但并没有人解答!这个问题很简单,但网上竟然找不到,这就太不可思议了!毕竟像我这样粗心应该很多才对啊!算了!做个记录!