在执行removeFromParent的时候Player竟然挂了?偶然还是必然?

楼主又遇见诡异的事情了,在执行removeFromParent的时候,Player竟然挂了,然后找朋友试了下,他的没挂!!!!!!这让我很纠结。。。希望朋友们试试以下代码,运行结果回复下我,好让我明白是不是我的问题!谢谢大家!!!!!

    self.node = display.newNode()
         :addTo(self)

    self.closeBtn = cc.ui.UIPushButton.new("close.png")
        :pos(display.cx, display.cy)
        :onButtonClicked(function(event)
            printInfo("self.node:removeFromParent(true)")
            self.node:removeFromParent(true)
        end)
        :addTo(self.node)


```

你使用的是哪个版本?

3.3 final~~~~~~~~~~~~~~~~~~真的好奇怪啊!

我经常这样。有的是之前没事,后来每次都死。只好加延时删除。

是啊,之前是没事的,突然就这样了。。。后来只有延时解决,但以为只是暂时解决。。。我叫别人试了下,他说没问题。。。我以为只有我遇见这种情况。。

移除前先判断下此对象是否还存在
not tolua.isnull(self.node)

then

remove

removeFromParent 是会挂掉,我这边也是得用延迟才能不挂掉。

经测试没有问题。
不能在触摸回调里移除自己,这个是3.3rc1及之前版本的一个bug,final对此专门做过修改,应该已经修正了。
你可以从以下几个方面检查一下:
1.Player是否是final版本的
2.framework是否是final版本的
3.是否有其他地方引起

好的,谢啦~

首先第三点可以排除,我为此专门做了测试,新建了一个项目,就只有以上代码。
第一点和第二点不知道看看如下截图是不是可以排除?

你这LuaTouchEventManager 代码是旧代码 最新git 上的代码是这样的 你可以更新下


void LuaTouchEventManager::removeTouchableNode(LuaEventNode *node)
{
    if (_bDispatching) {
        return;
    }

    _touchableNodes.eraseObject(node);
    auto found = _nodeLuaEventNodeMap.find(node->getDetachedNode());
    if (found != _nodeLuaEventNodeMap.end())
    {
        _nodeLuaEventNodeMap.erase(found);
    }
    //CCLOG("REMOVE TOUCHABLE NODE <%p>", node->getNode());
    if (_touchableNodes.size() == 0 && m_touchDispatchingEnabled)
    {
        disableTouchDispatching();
        destroyInstance();
    }
}

你这还真的不是final版本的代码,10楼帖出来的才是

我擦。。难怪。。。可是我就是覆盖安装的啊。。。。。。我靠被坑了~ :6:

原来是这样,谢啦。。。。。

难道是覆盖升级出的问题?