加入一个Button作为一个窗口关闭按钮
但在代码回调中写的
if(type != Widget::TouchEventType::ENDED) return;
this->removeFromParentAndCleanup(true);
然后在这里就会报错
这是什么原因嘛? 有解决的方法嘛?
加入一个Button作为一个窗口关闭按钮
但在代码回调中写的
if(type != Widget::TouchEventType::ENDED) return;
this->removeFromParentAndCleanup(true);
然后在这里就会报错
这是什么原因嘛? 有解决的方法嘛?
有报错信息嘛?
有堆栈嘛?
你看看堆栈嘛。
源码就在你手上嘛。
GameOne.exe!cocos2d::ui::Widget::onTouchEnded(cocos2d::Touch * touch, cocos2d::Event * unusedEvent) 行 709 C++
外部代码]
GameOne.exe!cocos2d::EventDispatcher::dispatchTouchEvent::__l65::(cocos2d::EventListener * l) 行 906 C++
直接指向UIWidget->onTouchEnded中的releaseUpEvent();
大体上,方法肯定没问题。主要看看你在写代码的时候,逻辑是否有问题。是不是在你不知道的时候,这个方法被执行过了,指针已经被释放了。再去操作,肯定会崩溃。检查下你的代码。
就目前写的这个代码都有问题。除了按下结束状态,还有按下开始和按下滑动两个状态。越过你的判断。要写某一个判断,尽量就判断一个状态。建议你改成下面的。
if(type == Widget::TouchEventType::ENDED)
{
this->removeFromParentAndCleanup(true);
return;
}
这样还是同样的问题
我在想,会不会是因为Button回调会执行两个状态的,跟这个会不会有关系
不过我也是在ENDED里调用的。
好了
我在把json加载进来后retain了一下,然后就可以了。
应该是它自动release了吧
不敢说,你这个方法是否有问题。可能不崩了。但是内存可能没有释放。因为多了一个引用计数。
还是建议检查下,你的逻辑是否存在问题。确认没问题,或者你也找不出来。那就只能按你现在的情况做了。
嗯 好的 谢谢指导哦!
不是END的时候移出,那END怎么执行?明显指针错误
这问题好像从3.0alpha开始就一直存在的,ccs的控件,我用lua,c++里类似,要runAction(cc.CallFunc:create(function() removeFromxxx() end)),就是下一帧remove,不能在事件处理的函数里remove自己,ccs的控件,哎,野种就是没亲生的好