UIButton事件函数中删除自身导致崩溃 和 触摸事件继续传递
来源:互联网 发布:大城市生活 知乎 编辑:程序博客网 时间:2024/06/06 07:36
方法2 node->runAction(RemoveSelf::create()); 同时可解决触摸事件继续传递问题
回调函数里判断是弹起事件时会调用UIButton的removeFromParent方法,这时会导致游戏崩溃,代码中断在void Widget::onTouchEnded(Touch *touch, Event *unusedEvent)方法里的releaseUpEvent()调用处.
1.修改引擎代码
void Widget::releaseUpEvent(){ if (_touchEventListener && _touchEventSelector) { (_touchEventListener->*_touchEventSelector)(this,TOUCH_EVENT_ENDED); } if (_touchEventCallback) { _touchEventCallback(this, TouchEventType::ENDED); }}
换个位置就好了
2.不需要修改引擎代码
删除自身的时候
改用 node->runAction(RemoveSelf::create());
代替原来的removefromparentandcleanup(true);
原理:我们可以看看引擎对removeSelf的实现
不直接调用remove,而是设置一个标志,在update中检测到标志再remove.
//// Remove Self//RemoveSelf * RemoveSelf::create(bool isNeedCleanUp /*= true*/) {RemoveSelf *ret = new RemoveSelf();if (ret && ret->init(isNeedCleanUp)) {ret->autorelease();}return ret;}bool RemoveSelf::init(bool isNeedCleanUp) {_isNeedCleanUp = isNeedCleanUp;return true;}void RemoveSelf::update(float time) {CC_UNUSED_PARAM(time);_target->removeFromParentAndCleanup(_isNeedCleanUp);}RemoveSelf *RemoveSelf::reverse() const{return RemoveSelf::create(_isNeedCleanUp);}RemoveSelf * RemoveSelf::clone() const{// no copy constructorauto a = new RemoveSelf();a->init(_isNeedCleanUp);a->autorelease();return a;}
0 0
- UIButton事件函数中删除自身导致崩溃 和 触摸事件继续传递
- Android中触摸事件传递过程
- Android中触摸事件传递过程
- Android中触摸事件传递过程
- Android中触摸事件传递分发机制
- MotionEvent(一) 单点触摸和事件传递
- 五、触摸事件的吞噬和传递
- android触摸事件传递
- Android触摸事件传递
- 触摸事件传递
- 触摸事件的传递
- android触摸事件传递
- 屏幕触摸事件传递
- 触摸事件传递过程
- Android 触摸事件传递
- nodejs websocket 事件中传递的参数不对导致nodejs崩溃
- Android 触摸事件传递机制
- cocos2d 触摸事件的传递
- Android中使用开源框架SlidingMenu构建左滑菜单栏
- 使用Kindeditor的多文件(图片)上传时出现上传失败的解决办法/使用Flash上传多文件(图片)上传时上传失败的解决办法
- gson的使用
- pick up
- linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解
- UIButton事件函数中删除自身导致崩溃 和 触摸事件继续传递
- 重新出发
- cout和printf的区别
- malloc、calloc、realloc的区别
- Java正则表达中Greedy Reluctant Possessive 的区别
- 浅谈java的内省
- 驾驭服务器——网络配置(超详细版本)
- 网络机顶盒芯片专题二:四核网络机顶盒半路杀出了一个程咬金-瑞芯微rk3128
- Android -- 程序判断手机ROOT状态,获取ROOT权限