我正在尝试为相当广泛的iOS应用程序构建一个框架,该应用程序将UIKit(以及Interface Builder的所有便利)与Cocos2D(一个功能强大的游戏引擎)结合在一起。我的目标是使用IB设计所有应用程序的GUI,并在必要时初始化封装Cocos2D的视图。有了这个设计,我希望保持两个框架相互分离。
Cocos2d模板项目附带一个AppDelegate类,花费一些时间设置EAGLView,构建CCDirector并连接两者。例如,考虑在AppDelegate中实现的applicationWillFinishLaunching
方法(下面)。我的问题是这个 - 如果我不想立即开始使用Cocos2D视图,而不是我创建的MainMenuViewController,我应该在这个函数中注释什么?
CCGLView *glView = [CCGLView viewWithFrame:[window_ bounds]
pixelFormat:kEAGLColorFormatRGB565
depthFormat:0
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
director_ = (CCDirectorIOS*) [CCDirector sharedDirector];
director_.wantsFullScreenLayout = YES;
// Display FSP and SPF
[director_ setDisplayStats:YES];
// set FPS at 60
[director_ setAnimationInterval:1.0/60];
// attach the openglView to the director
[director_ setView:glView];
// 2D projection
[director_ setProjection:kCCDirectorProjection2D];
// [director setProjection:kCCDirectorProjection3D];
// Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices
if( ! [director_ enableRetinaDisplay:YES] )
CCLOG(@"Retina Display Not supported");
// Default texture format for PNG/BMP/TIFF/JPEG/GIF images
// It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
// You can change this setting at any time.
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils];
[sharedFileUtils setEnableFallbackSuffixes:NO]; // Default: NO. No fallback suffixes are going to be used
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"]; // Default on iPhone RetinaDisplay is "-hd"
[sharedFileUtils setiPadSuffix:@"-ipad"]; // Default on iPad is "ipad"
[sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"]; // Default on iPad RetinaDisplay is "-ipadhd"
// Assume that PVR images have premultiplied alpha
[CCTexture2D PVRImagesHavePremultipliedAlpha:YES];
// Create a Navigation Controller with the Director
navController_ = [[MyNavigationController alloc] initWithRootViewController:director_];
navController_.navigationBarHidden = YES;
// for rotation and other messages
[director_ setDelegate:navController_];
// set the Navigation Controller as the root view controller
[window_ setRootViewController:navController_];
// make main window visible
[window_ makeKeyAndVisible];
我的想法是废弃glView以及与之相关的所有内容。然而,我对设置MyNavController的工作方式,设置导演的委托以及rootViewController有点不清楚。
答案 0 :(得分:0)
这是可能的,我在遵循本教程here
之前已经完成了该教程有点过时的旧版cocos2d,并没有使用故事板,但你应该能够从中获得基本的想法。
答案 1 :(得分:0)
我在一个应用程序中完成了这个。我做的是创建一个名为CocosViewController的.xib,每当用户启动一本故事书时就会出现(故事书在cocos2d中显示,而应用程序的其余部分是UIKit)。这个视图没什么特别,只是一个平面视图控制器,里面有一个视图。我只是将cocos director添加到UINavigationController中,并呈现该控制器。设置GL视图时,我将帧与视图控制器的大小匹配。
以下是可用于设置cocos2d的代码示例。如果场景已经在运行,我结束场景,否则如果场景已经在运行,你会得到一个令人讨厌的opengl错误。虽然在卸载视图时结束导演不应该发生。
@interface CocosViewController ()
{
UINavigationController* navController_;
CCDirectorIOS* director_;
}
@end
@implementation CocosViewController
-( void ) setupCocos2d
{
director_ = ( CCDirectorIOS* )[CCDirector sharedDirector];
if( [director_ runningScene] != nil )
[[CCDirector sharedDirector] end];
CCGLView *glView = [CCGLView viewWithFrame:[self.view bounds]
pixelFormat:kEAGLColorFormatRGB565
depthFormat:0
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
director_.wantsFullScreenLayout = YES;
[director_ setDisplayStats:YES];
[director_ setAnimationInterval:1.0/60];
[director_ setView:glView];
[director_ setProjection:kCCDirectorProjection2D];
if( ![director_ enableRetinaDisplay:YES] )
CCLOG(@"Retina Display Not supported");
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils];
[sharedFileUtils setEnableFallbackSuffixes:NO];
[sharedFileUtils setiPadSuffix:@"-ipad"];
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"];
[sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"];
[CCTexture2D PVRImagesHavePremultipliedAlpha:NO];
navController_ = [[UINavigationController alloc] initWithRootViewController:director_];
navController_.navigationBarHidden = YES;
[director_ setDelegate:navController_];
[self presentViewController:navController_ animated:NO completion:nil];
}
我在viewDidLoad中调用它。它主要发生在模板项目中的cocos2d app委托中。完成视图卸载后,不要忘记结束导演[CCDirector sharedDirector] end。
如果您还有其他问题,请与我们联系。希望这有帮助。