У меня есть игра, написанная на Cocos2d. Вдобавок к этому я представляю некоторые объекты UIKit.
Затем я добавил в него UIViewController, который обрабатывает отдельную мини-игру, написанную с использованием объектов UIKit и анимации UIView. Код, который я использую, чтобы добавить это в мою сцену Cocos2D, следующий:
gameVC = [[[UGameViewController alloc]
initWithNibName:@"UGameViewController" bundle:nil]
retain];
[[[CCDirector sharedDirector] openGLView] addSubview:gameVC.view];
gameVC.parentClass = self;
[gameVC viewDidAppear:YES];
Инициализация игры uikit происходит в методе viewDidAppear:
, поэтому я вызываю его с контроллера.
Когда вид был добавлен таким образом, я заметил, что анимации, которые я там использую (масштабирование + трансляция + перелистывание вида), очень и очень изменчивы. Запуск приложения на моем iPad и просмотр инструментов CoreAnimation показывает резкое падение FPS - с 40-60 кадров в секунду в сценах cocos2d до 4-8 кадров в секунду в части UIKit.
Могу ли я что-нибудь сделать, чтобы это как-то исправить?
Редактировать: моя инициализация CCDirector выглядит так:
- (void) applicationDidFinishLaunching:(UIApplication*)application
{
window = [[ShakeEnabledUIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Try to use CADisplayLink director
// if it fails (SDK < 3.1) use the default director
if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
[CCDirector setDirectorType:kCCDirectorTypeDefault];
CCDirector *director = [CCDirector sharedDirector];
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:kEAGLColorFormatRGB565
depthFormat:0
preserveBackbuffer:NO];
[director setOpenGLView:glView];
#if GAME_AUTOROTATION == kGameAutorotationUIViewController
[director setDeviceOrientation:kCCDeviceOrientationPortrait];
#else
[director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];
#endif
[director setAnimationInterval:1.0/60];
// make the OpenGLView a child of the view controller
[viewController setView:glView];
// 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];
// Run the intro Scene
[[CCDirector sharedDirector] runWithScene: [Main scene]];
}