У меня есть проект Cocos2d, и я хочу иметь постоянный фон во всем приложении. В applicationDidFinishLaunching
методе своего делегата, я заменил строку:EAGLView прозрачности кадров в секунду
[viewController setView:glView];
с
[[viewController view] addSubview:glView];
, потому что я добавил подвиды к мнению RootViewController в этом initWithNib, и эти изменения будут потеряны, если вид заменяется glView.
Я также изменил pixelFormat glView от 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;
Последние две строки являются виновниками; комментируя их (оба, а не только один) вызывает значительное падение кадров в секунду, в то время как комментирование строки 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]];
}
Любые идеи, почему это происходит? При необходимости я могу предоставить больше кода.
Я тестирую этот код на своем iPhone 4 под управлением iOS 5.0.1. –