我有一个Cocos2d项目,我想要在整个应用程序中保持不变的背景。在其委托的applicationDidFinishLaunching
方法中,我已替换了该行:
[viewController setView:glView];
与
[[viewController view] addSubview:glView];
因为我已经在它的initWithNib中添加了RootViewController视图的子视图,如果视图被glView替换,那些更改将丢失。
我还将glView的pixelFormat从kEAGLColorFormatRGB565
更改为kEAGLColorFormatRGBA8
。当我做出这个改变时,glView变得透明,我可以看透它,但fps急剧下降。如果我没有做出改变,那么视图就不会变得透明,但我看不到fps的大幅下降。我说的是fps大幅下降,从59.0-60.0到大约35.0-42.0。
我在上面的addSubview行下方使用此代码,以使视图透明:
glClearColor(0, 0, 0, 0);
director.openGLView.backgroundColor = [UIColor clearColor];
director.openGLView.opaque = NO;
最后两行是罪魁祸首;将它们注释掉(两者,不仅仅是一个)会导致fps大幅下降,而注释掉glClearColor
行对fps没有影响。
整个applicationDidFinishLaunching方法如下所示:
- (void) applicationDidFinishLaunching:(UIApplication*)application {
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
if(![CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
[CCDirector setDirectorType:kCCDirectorTypeDefault];
CCDirector *director = [CCDirector sharedDirector];
// Init the View Controller
viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
viewController.wantsFullScreenLayout = YES;
// Create the EAGLView manually
// 1. Create a RGB565 format. Alternative: RGBA8
// 2. depth format of 0 bit. Use 16 or 24 bit for 3d effects, like CCPageTurnTransition
//
EAGLView *glView = [EAGLView viewWithFrame:[window bounds]
pixelFormat:kEAGLColorFormatRGBA8
depthFormat:0
];
// attach the openglView to the director
[director setOpenGLView:glView];
if(![director enableRetinaDisplay:YES] )
CCLOG(@"Retina Display Not supported");
#if GAME_AUTOROTATION == kGameAutorotationUIViewController
[director setDeviceOrientation:kCCDeviceOrientationPortrait];
#else
[director setDeviceOrientation:kCCDeviceOrientationPortrait];
#endif
[director setAnimationInterval:1.0/60];
[director setDisplayFPS:YES];
// make the OpenGLView a child of the view controller
[[viewController view] addSubview:glView];
//***make glView transparent***
glClearColor(0, 0, 0, 0);
director.openGLView.backgroundColor = [UIColor clearColor];
director.openGLView.opaque = NO;
// make the View Controller a child of the main window
[window addSubview:viewController.view];
[window makeKeyAndVisible];
// Default texture format for PNG/BMP/TIFF/JPEG/GIF images
// It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
// You can change anytime.
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
// Removes the startup flicker
[self removeStartupFlicker];
// Run the intro Scene
[[CCDirector sharedDirector] runWithScene:[MainMenu scene]];
}
有关为何发生这种情况的任何想法?如果需要,我可以提供更多代码。
答案 0 :(得分:0)
如果您在第一代或第二代设备上进行测试,则预计帧速率会下降。你无能为力。这些设备的填充率非常高,而透明的32位GL视图只是要求设备太多。
如果这种情况发生在第3代或第4代设备上,那么就会出现问题,但我无法开始说明这可能是什么。
如果您在模拟器上测试性能,请不要。这是无关紧要的。