手动启动游戏后再次启动游戏崩溃,求救

程老师2088 2017-02-23 03:48:43
在iOS下,cocos2d直接打包出来的APP就是一整个游戏了,没有原生的界面,我做了一下改动,我把启动过程放到另外一个controller里面,这个controller里面写个按钮,按钮事件里面启动游戏。而且将游戏的js代码和图片放到document目录下,直接从document里面加载,不再从bundle里面去获取了。按钮事件代码如下:

-(void)didClickGame2Btn:(id)sender
{
//加载游戏
cocos2d::Application *app = cocos2d::Application::getInstance();

// Initialize the GLView attributes
app->initGLContextAttrs();
cocos2d::GLViewImpl::convertAttrs();

// Use RootViewController to manage CCEAGLView
RootViewController *rootViewController = [[RootViewController alloc] init];
rootViewController.wantsFullScreenLayout = YES;
[self.navigationController presentViewController:rootViewController animated:YES completion:^{
// IMPORTANT: Setting the GLView should be done after creating the RootViewController
cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView((__bridge void *)rootViewController.view);
cocos2d::Director::getInstance()->setOpenGLView(glview);

//修改资源加载目录
NSString *documentDir = [SEGetDirectories dirDoc];
NSString *wPath = [NSString stringWithFormat:@"%@/GameData/Game2",documentDir];
NSLog(@"document------:%@",documentDir);

std::vector<std::string> searchPathList;
searchPathList.push_back([wPath UTF8String]);
cocos2d::FileUtils::getInstance()->setSearchPaths(searchPathList);

//run the cocos2d-x game scene
app->run();
}];
[[UIApplication sharedApplication] setStatusBarHidden:true];
}

然后游戏里面添加一个menu,menu事件里面执行退出游戏的逻辑,代码如下:
gameEndCallBack:function(sender){
cc.log("director end............");
cc.director.end();
//cc.log("game end............");
//cc.game.end();
var ojb = jsb.reflection.callStaticMethod("ViewControllerUtils", "dismissCurrentVC");
}

里面的jsb.reflection.callStaticMethod("ViewControllerUtils", "dismissCurrentVC");是利用反射机制,关闭弹出的窗体,代码如下:
+(void)dismissCurrentVC
{
UIViewController *currentVC = [ViewControllerUtils getCurrentVC]; //这里获取最顶层的viewcontroller
[currentVC dismissViewControllerAnimated:YES completion:^{
NSLog(@"xxx");
}];
}

整个过程在第一次是没问题的,可以正常启动游戏,然后退出回到主页面,但当再次进入的时候,程序崩溃了,在JS_binding的ScriptingCore::runScript方法里面的
evaluatedOK = JS_ExecuteScript(cx, global, *script, &rval);
这一行,报了exc_bad_access错误。

我猜测会不会是资源没释放的原因,于是尝试跑ScriptingCore里面的cleanup办法,但是都不凑效,依然会崩溃。

由于对于cocos底层机制了解得不够深入,特此前来求教各位大神,看看这个是怎么回事~
...全文
267 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
程老师2088 2017-03-10
  • 打赏
  • 举报
回复
引用 2 楼 lyxxjfzx 的回复:
给你顶一下~~~~~~~~
谢谢,问题解决了,分都给你吧,哈哈
lyxxjfzx 2017-03-08
  • 打赏
  • 举报
回复
给你顶一下~~~~~~~~
程老师2088 2017-02-24
  • 打赏
  • 举报
回复
自己顶一下~~~~

722

社区成员

发帖
与我相关
我的任务
社区描述
Cocos2d-x相关内容讨论专区
社区管理员
  • Cocos2d-x
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧