博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d 的touch事件要点
阅读量:6147 次
发布时间:2019-06-21

本文共 899 字,大约阅读时间需要 2 分钟。

在使用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];

}

转载地址:http://anmya.baihongyu.com/

你可能感兴趣的文章
1-1-1 裸机工具安装
查看>>
CentOS Linux 安装 iftop 监控网络流量
查看>>
使用DeepLearning4j训练和保存模型
查看>>
分页插件jquery.pagination.js
查看>>
H5页面快速搭建之高级字体应用实践
查看>>
Struts 1或2 ActionForm接受不到页面传值的问题
查看>>
配置 L3 agent - 每天5分钟玩转 OpenStack(99)
查看>>
Laravel / Lumen 实践总结
查看>>
总结:MySQL备份与恢复的三种方法
查看>>
java中final关键字的总结
查看>>
jdbc conn.commit()提交事务和 rollback()使用
查看>>
svn的终端使用
查看>>
JSP+Severlet+JDBC
查看>>
[攻克存储] SRAM地址线的连接
查看>>
Perl模块 File::Tail::Multi特定属性用法
查看>>
很感人的英语小短文
查看>>
EXT.NET 为 FormPanel设置背景颜色
查看>>
迁移phpstudy中的mysql至Linux
查看>>
oracle 11g的interval partition 如何按天\周\月\年分区
查看>>
Mysql的优化实践分析
查看>>