解决cocos2d-js集成到ios原生应用中退出游戏,再加载游戏时会奔
最近在整cocos2d-js集成到ios原生应用的时候,遇到一个问题。在原生应用中加载cocos2d-js制作的游戏,然后点击ios的某个原生按钮想要退出游戏,调用了cocos2d::Director::getInstance()->end();这样调用的话退出倒是退出了,不过再次加载游戏的时候,就会奔溃了,奔溃在了 evaluatedOK = JS_ExecuteScript(cx,global,script,&rval);这行,绞尽乳汁也没想到什么为嘛会这样,尝试着在调用cocos2d::Director::getInstance()->end();的时候加了这两句 ScriptingCore::getInstance()->cleanAllScript();
ScriptingCore::getInstance()->reset();
这样再次加载的时候倒是不会奔溃了,不过会报一个no filename的问题,此路不通。 最后看到了一篇博客,用了如下方案,竟然可行。 virtual void clearSc() = 0;
2、在AppDelegate.h里添加clearSc函数。 virtual void clearSc();
并在AppDelegate.cpp里添加实现 void AppDelegate::clearSc(){ ScriptingCore::getInstance()->cleanup(); }
3、在 frameworks/cocos2d-x/cocos/scripting/js-bindings/manual/ScriptingCore.h 添加初始化判定。 bool ifFirst = true;
并在frameworks/cocos2d-x/cocos/scripting/js-bindings/manual/ScriptingCore.cpp 作一些小修改 void ScriptingCore::start()
{
// for now just this
createGlobalContext();
ifFirst = false;
}
在createGlobalContext添加代码 void ScriptingCore::createGlobalContext() {
if (_cx && _rt) {
ScriptingCore::removeAllRoots(_cx);
JS_DestroyContext(_cx);
JS_DestroyRuntime(_rt);
_cx = NULL;
_rt = NULL;
}
// Start the engine. Added in SpiderMonkey v25
if (!JS_Init()){
return;
}
if(!ifFirst){//!!!!!!!ADD THIS 添加这个初始化
initRegister();
}
//...............
}
在frameworks/cocos2d-x/cocos/base/CCDirector.cpp 里修改mainloop方法 void DisplayLinkDirector::mainLoop()
{
if (_purgeDirectorInNextLoop)
{
_purgeDirectorInNextLoop = false;
purgeDirector();
Application::getInstance()->clearSc();
}
else if (_restartDirectorInNextLoop)
{
_restartDirectorInNextLoop = false;
restartDirector();
}
else if (! _invalid)
{
drawScene();
// release the objects
PoolManager::getInstance()->getCurrentPool()->clear();
}
}
然后再重新编译,就ok了,关于如何将cocos2d-js整到原生ios中,参见上一篇文章。 参考文章:http://blog.csdn.net/mu_cjgm/article/details/52372089 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- flex bulider 4新建java web应用
- jsonp跨域请求C# webform页面的数据
- c# – 使用客户端对象模型在SharePoint文档库上创建文件夹
- Oracle性能调优
- ruby-on-rails – 如何在rails应用程序中调试resque作业
- ruby-on-rails – Rails 4通过渲染部分传递多个变量
- oracle中decode的使用以及如果使用decode进行范围匹配
- 深入理解 flex-grow & flex-shrink & flex-basis
- 如何将cocos2d-x项目打包成一个.exe
- [Swift]LeetCode327. 区间和的个数 | Count of Range Sum