【问题标题】:Integrating cocos2d in UIKit app在 UIKit 应用中集成 cocos2d
【发布时间】:2012-02-23 07:22:38
【问题描述】:

我在将 cocos2d 场景集成到现有应用程序的选项卡中时遇到了一些麻烦。 我使用 cocos2d 附带的 Xcode 模板开发了场景,效果很好,但是当我尝试在现有应用程序上加载相同的场景时,结果却是黑屏。

这是我加载链接到选项卡的 UIViewController 时运行的代码

-(void)viewDidLoad {
        director = [CCDirector sharedDirector]; //declared in the header file
        //declared in the header file, sized as whole screen minus the tab bar
        coolview = [CCGLView viewWithFrame:CGRectMake(0,0, 320,321) pixelFormat:kEAGLColorFormatRGB56 depthFormat:0 preserveBackbuffer:NO sharegroup:nil multiSampling:NO numberOfSamples:0]; 
        [director setView:coolview];
        [self setView:coolview];
        [director setAnimationInterval:1.0/60];
        [director setDelegate:self];
        [director setProjection:kCCDirectorProjection2D];
        [director runWithScene:[HelloWorldLayer scene]];
        }

知道为什么我应该黑屏吗?我错过了什么?

HelloWorld 层中的代码已执行,对象已实例化,但似乎它们没有被渲染。

我还收到以下反馈:

OpenGL error 0x0501 in -[CCShaderCache loadDefaultShaders] 174
OpenGL error 0x0501 in -[CCTextureAtlas initVAO] 167
OpenGL error 0x0501 in -[CCDirector setView:] 308
OpenGL error 0x0501 in -[CCTextureAtlas initVAO] 167

但我一直无法找到错误代码的含义。 我正在使用 cocos2d 版本 2。

提前感谢您的帮助 卢卡

一点更新:1.0.1 版本不会出现此问题,将 CCGLView 替换为 EAGLView。 所以我假设这可能是这个版本的一个小错误。

很遗憾,我无法切换到 1.0.1,因为我需要一些 box2d v2.2 的功能,而这些功能只有 cocos2d v2.0 才能提供。 我正在尝试使 box2d v2.2 与 cocos v1.0.1 一起使用,但它变得非常丑陋!

有人知道我如何在 2.0 中修复它,或者至少为我指明正确的方向吗?问题可能出在哪里?在 CCDirector 或 CCGLView 中?

谢谢 卢卡

【问题讨论】:

  • 在您的代码中看起来很可疑的一件事是“[director runWithScene:[HelloWorldLayer scene]];”这一行CCLayer 没有场景属性。为什么要将 CCScene 对象放在图层中?你的场景中真的有任何东西要渲染吗?我在一个测试应用程序中尝试了你的代码,它运行良好。

标签: iphone opengl-es cocos2d-iphone


【解决方案1】:

您还必须拥有所有 Cocos2D 初始化代码。 Cocos2D 创建一个 openGL 渲染上下文,然后将其绘制到以显示精灵。如果你看一下 cocos 自带的模板应用,在 AppDelegate 里面有一堆初始化的东西。

我什至不确定是否可以(或者是否可以,是否容易)将 cocos2d 场景合并到现有的 iOS 应用程序中。

【讨论】:

  • 绝对可以将 cocos2d 场景合并到现有的 iOS(或 OS X)应用程序中。当然,你必须拉入 cocos2d 源文件。
【解决方案2】:

在完成所有初始化工作后,Nick Bull 谈到,您需要注意一件事:cocos2d 使用了他自己的 CCLayer。但我认为这一层,以及在所有 UIView 子类中的层 - 是相同的东西。如果你能很好地替换它们,或者以某种方式链接,你可以在你的视图中做任何 cocos2d 工作人员。这应该是你的起点,祝你好运。

【讨论】:

  • 我尝试了 Nick Bull 所说的,将所有内容从 appdelegate 复制并粘贴到 viewDidLoad,但没有任何改变。你能详细说明你的建议吗?这似乎很有趣,但我不太了解。你能告诉我更多吗?
  • 对不起,我不能说更多:我从未尝试过做你正在做的事情,这只是我的猜测。你看,cocos2d 使用了 UIKit 的许多特性,而不是以简洁的形式:它们中的许多(或者,可能是全部?)是 UIKit 的子类。可能,CCLayer 也被降级了。如果是,您可以尝试将 UIView 中的图层替换为 cocos2d 中的 CCLayer。我只是希望 UIView 中的图层不受保护或其他什么...
猜你喜欢
  • 2011-07-30
  • 2011-07-29
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多