creator:1.8.2
xcode:9.2
打开APP后,闪退。错误如下:
涉及脚本:jsb_cocos2dx_manual.cpp
涉及函数:onGLProgramStateDestroy
以上是IOS设备上出的问题。
安卓环境下完全没问题。
AS版本3.0
creator:1.8.2
xcode:9.2
打开APP后,闪退。错误如下:
安卓环境下完全没问题。
AS版本3.0
由于报错没有更多的堆栈信息,所以无从下手,求大神解惑!
提供点线索也好。。。。
是不是,新引擎对全局变量的控制更加严格了?
game.restart()的时候,销毁所有全局变量。由于某些变量还在引用,所以就断言了?
求线索啊
嗯,确实有可能是 jsb 重启过程中引起的 bug,帮你反馈一下~
触发 assert 应该是可以在xcode中看到堆栈信息的。
你是否有自定义 shader ?
examplecase 里面的 restart 按钮重启游戏,会出现你说的问题么?
目测你是集成到自己的游戏大厅app中,是否有哪些操作是不太一样的。
能否提供一个基于 helloworld 的复现demo出来?
能否基于你目前这个shader,整理一个复现demo出来么?这样我们才好分析具体是什么原因。
我也是闪退了。。。
还是1.8.0比较稳定
我吧我们的游戏简化了下,删除了很多脚本。未再出现崩溃。
故而可排除底层bug,所以我想问下,在客户端JS代码编写过程中,有哪些情况会导致资源释放的时候断言。
例如:滥用全局变量?还是什么
onGLProgramStateDestroy
static void onGLProgramStateDestroy(GLProgramStateCache* cache, GLProgramState* state)
{
se::AutoHandleScope hs;
// NOTE: 'state' argument is attached to global object, therefore we need to detach it from global object.
se::Object* global = se::ScriptEngine::getInstance()->getGlobalObject();
se::Value val;
bool fromCache = false;
native_ptr_to_seval<GLProgramState>(state, __jsb_cocos2d_GLProgramState_class, &val, &fromCache);
if (fromCache && val.isObject())
{
global->detachObject(val.toObject());
}
else
{
assert(false);
}
}
这边抛异常的作用是,确保 GLProgramState 的 native js bindings 对象都是之前创建好的。如果有一个 GLProgramState 的c++对象需要destroy,而这时候我们发现它没有对应的 JS 对象(native_ptr_to_seval 返回 fromCache 为 false的情况下),那么就属于异常情况了,需要检查代码,看看哪里的问题。当然也说不准是引擎里面的状态控制哪里有问题。所以我这里还是需要有个复现方式,才好查。
由于目前项目比较紧,我没有太多的时间去查出这部分问题代码。后续等我空了后我会跟进的。谢谢大佬了!