2dx 3.7 切换场景崩溃

一个项目是3.6写的。
用了cocostudio 2.3 来做界面。
今天引擎升级到了3.7,结果运行项目,
切换场景的时候崩溃,

如下是调用堆栈:

libcocos2d.dll!cocos2d::Ref::release() 行 133 C++
libcocos2d.dll!cocos2d::Director::setNextScene() 行 1058 C++
libcocos2d.dll!cocos2d::Director::drawScene() 行 283 C++
libcocos2d.dll!cocos2d::DisplayLinkDirector::mainLoop() 行 1335 C++
libcocos2d.dll!cocos2d::Application::run() 行 92 C++
SuperCute.exe!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpCmdLine, int nCmdShow) 行 17 C++

崩溃在这个函数当中,void Ref::release()
在delete 场景对象时崩溃,

断言的信息是:


Microsoft Visual C++ Runtime Library

Debug Assertion Failed!

Program: …nation\SuperCute\Source\proj.win32\Debug\Output\SuperCute.exe
File: f:\dd\vctools\crt\crtw32\misc\dbgheap.c
Line: 1322

Expression: _CrtIsValidHeapPointer(pUserData)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)


中止(A)重试®忽略(I)

百思不得其解,是怎么回事?
在3.6中是没事的。

// ————————————————————————————————————————————————————————————

经过几个小时的调试和尝试,发现,自定义的场景类不能继承自Scene
否者切换时就会出错。
如下写法的场景类:

class SceneTest1 : public Scene

当 SceneTest1 场景被别的场景替换掉时,就会崩溃。

cocos2d-x 怎么这么多Bug的?
这个bug非常严重。

咦···可能和我遇到的一样呢,我的帖子发错区了。
也还没找到原因,周末查查。
http://www.cocoachina.com/bbs/read.php?tid-314708.html

强烈吐槽啊,我也遇到这个问题

我用的也是3.7,没问题。

可以用64位试试,有没有问题,我的32位一点问题没有,64位就不行

同样遇到类似的问题,调试了好久都没找到原因所在,我也是用一个继承自场景的自定义场景进行场景转换,原先在3.7之前一切正常,也是换到3.7后崩溃,跟了好久,好像是3.7后继承的场景类里会有两个场景数据成员,而后把一个物理还是3D的功能宏定义为取消后正常了,这个宏默认定义为启用,会在场景类里多加一些成员函数和数据等。现在我暂时没去搞那个问题了,记不太清了,所以也无法描述清楚和准确。等抽时间再去看看这个问题。

是的,我貌似也遇到过这个问题,就是那些乱七八糟的宏搞的。。。

继承自scene?你这逻辑也挺别致的

cocos场景切换很糟糕,上线项目都不用场景切换。

研究了一天,终于找到解决办法了
先说说出现这个问题的原因
原因就是 当进行场景切换时,如果在这个时候进行removeChild操作时
在CCNode.cpp的onEnter或onEnterFinish中
for( const auto &child: _children)
会抛异常

处理方法
while(true){
if (_children.size() == 0 || index >= _children.size()){
break;
}
const auto &child = _children.at(index);
child->onEnter(); //或onEnterFinish()
index++;
}

研究了一天,终于找到解决办法了
先说说出现这个问题的原因
原因就是 当进行场景切换时,如果在这个时候进行removeChild操作时
在CCNode.cpp的onEnter或onEnterFinish中
for( const auto &child: _children)
会抛异常

处理方法
while(true){
if (_children.size() == 0 || index >= _children.size()){
break;
}
const auto &child = _children.at(index);
child->onEnter(); //或onEnterFinish()
index++;
}

场景继承不能自Scene,你这吐槽也挺别致的。

请教一下,这个为什么会抛异常呢?