我正在处理一个项目,该项目需要能够显示几个不同的模型并与之交互。其中一个视图是全屏(iPad横向),其他视图是较小的子视图。我目前遇到的问题如下:
-
手动创建CCGLView并将其应用于共享控制器会导致各种GL错误,特别是与CCGLView的swapBuffers方法有关。
-
由于Cocos3D的director是UIViewController的一个子类,也是一个单例,因此在不创建复杂堆栈来控制当前活动/需要显示的视图的位置和内容的情况下,尝试在项目中拥有多个视图是非常困难/令人不快的。
除了这些因素,项目的整体层次结构(由于它使用所有自定义控件具有完全的自定义特性),我不得不使用包含视图控制器来管理项目中所有不同视图控制器之间的导航。再加上一个只允许一个GLView在Cocos3D上下文中进行交互的singleton,您可以看到它从哪里开始变得一团糟。
有人对该怎么办有什么建议吗?如果你对我在GLView的实例化中可能做错了什么有任何想法,那至少也是一个开始。
_director = CocosViewController.sharedDirector;
_director.supportedInterfaceOrientations = UIInterfaceOrientationMaskAll;
_director.viewShouldUseStencilBuffer = NO; // Set to YES if using shadow volumes
_director.viewPixelSamples = 1; // Set to 4 for antialiasing multisampling
_director.animationInterval = (1.0f / kAnimationFrameRate);
_director.displayStats = NO;
[_director enableRetinaDisplay: YES];
CCGLView *glView = [CCGLView viewWithFrame:_director.view.frame
pixelFormat:kEAGLColorFormatRGBA8
depthFormat:0 preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
glView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[_director setCcGLView:glView];
仅仅这样做是行不通的,并且会给我一个带有OpenGL错误0x502错误的黑屏。
Cocos2D 2.0并不是为处理多个视图而设计的,"修复"这个问题绝非易事。
既然cocos3d需要cocos2d,你在这里运气不好。坚持单一视图。