1

我做了一些谷歌搜索和stackoverflowing,但仍然存在该怎么做的问题。我有一个用于 iphone 的大型导航项目 iOS5.1。在几个 VC 上,我需要包含一些或多或少复杂的动画,比如男孩角色的咀嚼动画。我使用过 cocos2d,我知道使用 cocos2d 很容易实现我的目标。但是是否有可能以某种方式将 coco2sd 的场景和图层包含到所需的 VC 中?或者以某种方式将视图与场景重叠?任何提示将不胜感激。

4

2 回答 2

2

我这样做的方法是在我初始化 ViewController 时创建一个 CCDirector,CCDirector 使用一个 OpenGL 视图,您可以创建一个 ViewController 的子视图。有了 CCDirector,您就可以完成在 Cocos2D 中通常会做的所有事情。

if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
    [CCDirector setDirectorType:kCCDirectorTypeMainLoop];

CCDirector *director = [CCDirector sharedDirector];

EAGLView *glview = [EAGLView viewWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];

[self.view insertSubview:glview atIndex:1];
[director setOpenGLView:glview];
于 2012-09-11T08:56:17.730 回答
1

首先,您需要在 AppDelegate 中创建一个 director:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // ...

  // Create Cocos2D Director
  //
  // 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];
}

在您的-viewDidLoad方法中,将 Cocos2D 创建的视图添加self.view为子视图:

- (void)viewDidLoad {
  [super viewDidLoad];

  // configre subviews
  // ...

  // Add your Cocos2D view
  EAGLView * glView = [EAGLView viewWithFrame:self.view.bounds
                                  pixelFormat:kEAGLColorFormatRGB565
                                  depthFormat:0];
  [glView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
  [[CCDirector sharedDirector] setOpenGLView:glView];
  [self.view addSubview:glView];

  // Run a blank scene for testing
  CCScene * blankScene = [CCScene node];
  [[CCDirector sharedDirector] runWithScene:blankScene];
}

您可以创建自己的场景来替换blankScenethen。


我强烈推荐你一篇关于这项技术的文章:“如何集成 Cocos2D 和 UIKit”。我通过阅读@Ray 的帖子成功地实现了这一点!;)

于 2012-09-11T09:02:37.177 回答