У меня есть приложение для iPhone, которое в основном использует стандартные элементы управления.Есть одно представление, которое отображается в OpenGL (причудливые графики).Чтобы сэкономить много работы, я огляделся и нашел Cocos2d.Похоже, что он имеет именно то, что мне нужно (OpenGL ES, с ним относительно просто работать), но я столкнулся с проблемой.
Я не знаю, как ограничить Cocos2d для существования только в одномПосмотреть.Раньше я реализовывал свои OpenGL в виде и использовал простой ViewController для представления его в контроллере навигации.Здесь Cocos2d, похоже, нужно сделать намного больше, и я не уверен, как встроить его в тот же подход ViewController / View, который я использовал с необработанным OpenGL.
ОБНОВЛЕНИЕ: Это то, что я делал делал.Перейдите к следующему жирному шрифту, чтобы увидеть, что я делаю сейчас.
#import <UIKit/UIKit.h>
@interface CocosController : UIViewController {
UIWindow *window;
}
@property (nonatomic,retain) UIWindow *window;
@end
И мой CocosController.m:
#import "CocosController.h"
#import "SomeScene.h"
#import "cocos2d.h"
@implementation CocosController
@synthesize window;
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
// Initialization code
CC_DIRECTOR_INIT();
CCDirector *director = [CCDirector sharedDirector];
//landscape
[director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];
[director setDisplayFPS:true];
//turn on multi-touch
EAGLView *cocosView = [director openGLView];
[cocosView setMultipleTouchEnabled:true];
self.view = cocosView;
//default texture formats...
[CCTexture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];
[[CCDirector sharedDirector] runWithScene:[SomeScene scene]];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[[CCDirector sharedDirector] purgeCachedData];
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[[CCDirector sharedDirector] release];
[window release];
[super dealloc];
}
@end
И, наконец, как я пытаюсьчтобы представить его (одним нажатием кнопки):
CocosController *cocosController = [[CocosController alloc] init];
[[self navigationController] pushViewController:cocosController animated:true];
Это новый подход, но результаты те же.
Часть ApplicationDidFinish моего AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
[CCDirector setDirectorType:kCCDirectorTypeThreadMainLoop];
CCDirector *director = [CCDirector sharedDirector];
[director setDisplayFPS:YES];
state = kStateEnd;
// Add the navigation controller's view to the window and display.
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
return YES;
}
CocosController, который я использую для представления вида:
#import "CocosController.h"
#import "cocos2d.h"
#import "SomeScene.h"
@implementation CocosController
@synthesize mainView;
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
EAGLView *glview = [EAGLView viewWithFrame:CGRectMake(0, 0, 250,350)];
[mainView addSubview:glview];
CCDirector *director = [CCDirector sharedDirector];
[director setOpenGLView:glview];
CCScene *scene = [CCScene node];
id node = [SomeScene node];
[scene addChild: node];
[director runWithScene:scene];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
И этот бит от нажатия кнопки в деталях ViewController, который у меня есть, который должен заставить все это появиться:
CocosController *cc = [[CocosController alloc]init];
cc.mainView = self.view;
[[self navigationController] pushViewController:cc animated:false];