cocos2d开发时的touch事件

 

 

在使用cocos2d开发游戏时,免不了要涉及到touch事件。 使用CCLayer时,可以简单的设置self.isTouchEnable = YES,然后改写 – (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 方法,即可实现触摸事件的接收及处理。 但如果使用CCSprite甚至CCNode时,则必须手动添加代理协议才可以接收事件。 协议的具体使用方法网上有很多,这里就不再赘述,我主要说一下,使用这种方法时需要注意的一点。 当使用CCTouchDispatcher的 -(void) addTargetedDelegate:(id<CCTargetedTouchDelegate>) delegate priority:(int)priority swallowsTouches:(BOOL)swallowsTouches 或-(void) addStandardDelegate:(id<CCStandardTouchDelegate>) delegate priority:(int)priority 添加事件代理后,请勿必记得,在release前,删除添加的代理 否则会出现无法释放内存的现象 具体表现为: 假设A场景中某层使用了[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0Touches:YES] 将自身添加为触摸事件接收者 而在切换至场景B时,没有将该代理删除,则场景B中的Touch事件接收者仍然会被场景A中该层接收,即,场景A未能完全释放内存。 解决方法:旦凡显示添加代理的层,在退出前也需要显示删除 可以在 onExit函数中进行删除

– (void)onExit {   

// 删除Touch代理    

[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];   

//别忘了调用父类的onExit方法    

[super onExit];

}

 

 

 

你可能感兴趣的:(cocos2d)