解决cocos2d-js集成到ios原生应用中退出游戏,再加载游戏时会奔溃的问题

解决cocos2d-js集成到ios原生应用中退出游戏,再加载游戏时会奔溃的问题,第1张

概述最近在整cocos2d-js集成到ios原生应用的时候,遇到一个问题。在原生应用中加载cocos2d-js制作的游戏,然后点击ios的某个原生按钮想要退出游戏,调用了cocos2d::Director::getInstance()->end();这样调用的话退出倒是退出了,不过再次加载游戏的时候,就会奔溃了,奔溃在了 evaluatedOK = JS_ExecuteScript(cx, globa

最近在整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的问题,此路不通。

最后看到了一篇博客,用了如下方案,竟然可行。
1、目录frameworks/cocos2d-x/cocos/platform/CCApplicationProtocol.h 下添加clearSc函数。

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;      }      @H_502_106@// Start the engine. Added in SpIDerMonkey v25     if (!Js_Init()){          return;      }      if(!ifFirst){@H_502_106@//!!!!!!!ADD THIS 添加这个初始化         initRegister();      }      @H_502_106@//............... }

在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
http://www.cocoachina.com/bbs/read.php?tid=1713866&page=e&#a

总结

以上是内存溢出为你收集整理的解决cocos2d-js集成到ios原生应用中退出游戏,再加载游戏时会奔溃的问题全部内容,希望文章能够帮你解决解决cocos2d-js集成到ios原生应用中退出游戏,再加载游戏时会奔溃的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1083172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存