环境 : Xcode iOS
使用场景:
app启动后先运行几个page页面,通过页面的按钮进入游戏场景,第一次进入场景的ViewController不会报错,当返回到app页面然后再进入场景ViewController后报错。
错误信息:
OpenGL error 0x0501 in /Users/jenkins/Work/CocosPackageAuto/CocosFramework/cocos2d-x/cocos/renderer/CCTexture2D.cpp initWithMipmaps 647
已经在ViewController中加入了:
-(void) viewDidAppear:(BOOL)animated{
NSLog(@“View Did Appear…”);
cocos2d::Director::getInstance()->resume();
cocos2d::Director::getInstance()->startAnimation();
}
- (void)viewWillDisappear:(BOOL)animated{
NSLog(@“View will Disappear…”);
cocos2d::Director::getInstance()->pause();
cocos2d::Director::getInstance()->stopAnimation();
}
我是在- (void)viewDidLoad中创建OpenGL View 并加入当前ViewController的,每次进入ViewController都会执行viewDidLoad方法。
问题的原因在于每次都进入ViewController后都执行viewDidLoad方法创建OpenGL View 相关代码
有没有什么方法在ViewController退出后彻底销毁cocos相关对象,使每次进入ViewController都重新创建OpenGLView 而不报错?
viewDidLoad 方法详细如下:
-
(void)viewDidLoad {
NSLog(@“View Did Load…”);
;cocos2d::Application *app = cocos2d::Application::getInstance();
app -> initGLContextAttrs();
cocos2d::GLViewImpl::convertAttrs();window = initWithFrame: bounds]];
CGRect windowBounds = UIScreen mainScreen ].applicationFrame;//= ;
// CCLOG("%f %f %f %f", windowBounds.origin.x, windowBounds.origin.y, windowBounds.size.width, windowBounds.size.height);CGRect customBounds = CGRectMake(windowBounds.origin.x, windowBounds.origin.y, windowBounds.size.width, windowBounds.size.height);
// Init the CCEAGLView
CCEAGLView eaglView = [CCEAGLView viewWithFrame: customBounds
pixelFormat: (__bridge NSString)cocos2d::GLViewImpl::_pixelFormat
depthFormat: cocos2d::GLViewImpl::_depthFormat
preserveBackbuffer: NO
sharegroup: nil
multiSampling: NO
numberOfSamples: 0 ];;
NSLog(@“view %@”, self.view);
eaglView.tag = 100;;
setStatusBarHidden:false];
cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView((__bridge void *) eaglView);
cocos2d::Director::getInstance()->setOpenGLView(glview);
app->run();
}