zoukankan      html  css  js  c++  java
  • Cocos2dx添加层,层删除自己异常,位置在cocos/ui/UIWidget.cpp的(_touchEventListener->*_touchEventSelector)(this,TOUCH_EVENT_BEGAN);处

    这个问题困扰了一天,今天还在找解决办法。最后把(_touchEventListener->*_touchEventSelector)(this,TOUCH_EVENT_BEGAN);贴到搜索框中才找到问题:https://github.com/andyque/cocos2d-x/commit/3502cb0a23a17967fac4a7bccaf7d2e52297a2c6,原来是一个cocos2dx的bug,在使用这些指针之前已被释放,所以呢,在释放之前先retain一下,然后再release一下。如下

    void Widget::pushDownEvent()
    {
    + this->retain();
    if (_touchEventCallback) {
    _touchEventCallback(this, TouchEventType::BEGAN);
    }
    @@ -727,10 +728,12 @@ void Widget::pushDownEvent()
    {
    (_touchEventListener->*_touchEventSelector)(this,TOUCH_EVENT_BEGAN);
    }
    + this->release();
    }

    void Widget::moveEvent()
    {
    + this->retain();
    if (_touchEventCallback) {
    _touchEventCallback(this, TouchEventType::MOVED);
    }
    @@ -739,11 +742,12 @@ void Widget::moveEvent()
    {
    (_touchEventListener->*_touchEventSelector)(this,TOUCH_EVENT_MOVED);
    }
    + this->release();
    }

    void Widget::releaseUpEvent()
    {
    -
    + this->retain();
    if (_touchEventCallback) {
    _touchEventCallback(this, TouchEventType::ENDED);
    }
    @@ -752,10 +756,12 @@ void Widget::releaseUpEvent()
    {
    (_touchEventListener->*_touchEventSelector)(this,TOUCH_EVENT_ENDED);
    }
    + this->release();
    }

    void Widget::cancelUpEvent()
    {
    + this->retain();
    if (_touchEventCallback)
    {
    _touchEventCallback(this, TouchEventType::CANCELED);
    @@ -765,7 +771,7 @@ void Widget::cancelUpEvent()
    {
    (_touchEventListener->*_touchEventSelector)(this,TOUCH_EVENT_CANCELED);
    }
    -
    + this->release();
    }

    然后在编译执行,发现问题消失。草。

  • 相关阅读:
    jQuery1.3.2 源码学习 2 两个重要的正则表达式
    学习 jQuery 4 使用方法选择
    学习 jQuery 6 在 TreeView 中实现全选
    jQuery1.3.2 源码学习4 init 函数分析 2
    学习 jQuery 3 选择器
    学习 jQuery 5 筛选和过滤器
    条款9:在删除选项中仔细选择
    优化3D图形流水线
    指针相减
    浅谈水体的实现
  • 原文地址:https://www.cnblogs.com/playerboy/p/3872223.html
Copyright © 2011-2022 走看看