【问题标题】:Multiple OpenGL views (Cocos2D)多个 OpenGL 视图 (Cocos2D)
【发布时间】:2012-08-23 11:33:31
【问题描述】:

注意任何可以帮助我彻底解决此问题的人都将获得100 分赏金!!!

在我的应用程序中,我将 UIKit 和 Cocos2D 混合在一起,我使用 addSubview 和 removeFromSuperview 调用做了一些简单的自定义视图动画。我最近需要在我的应用程序中添加另一个 CCScene,以摆脱 Cocos2D 可以轻松处理的一些复杂的 UIKit 代码。所以我的应用程序中有一个基本视图,它是一个 UIViewController,上面有一些按钮。在这些按钮的后面是一个 CCGLView,Cocos2D 会做任何事情。这很好用。然后当我想去我的第二个视图控制器(让我们称之为我的游戏视图),在我做我的视图动画之后,viewdidload 被调用(那是我的导演初始化用于第二个 CCScene 的地方)要么什么都没有发生,要么我在控制台中收到如下错误。现在在我的原始项目中,我得到了以下错误,在这个示例项目中没有任何反应。这些是错误:

OpenGL error 0x0501 in DrawSolidPolygon 104
OpenGL error 0x0502 in DrawSolidPolygon 104
OpenGL error 0x0501 in -[CCTextureAtlas drawNumberOfQuads:fromIndex:] 556
OpenGL error 0x0502 in -[CCTextureAtlas drawNumberOfQuads:fromIndex:] 556
OpenGL error 0x0502 in -[CCTextureAtlas drawNumberOfQuads:fromIndex:] 556
OpenGL error 0x0501 in -[CCParticleSystemQuad postStep] 411
OpenGL error 0x0506 in -[CCSprite draw] 532
OpenGL error 0x0502 in -[CCParticleSystemQuad draw] 434
OpenGL error 0x0502 in -[CCSprite draw] 532
OpenGL error 0x0502 in -[CCSprite draw] 532

现在,当我在原始项目中有一个场景时,不会发生这种情况,只有在我使用 2 个 CCScenes 时才会发生。因此,示例项目中的代码几乎是我原始项目的副本,因此其中的任何错误很可能会导致我在这里解决手头的问题,并希望摆脱那些 OpenGL 错误。

经过几个小时的测试和收集信息,我的问题似乎类似于:iOS and multiple OpenGL views。我也看过这个链接:http://gamesfromwithin.com/using-multiple-opengl-views-and-uikit。然而,这两个链接对我来说都没有任何意义,因为我不知道如何将它与 Cocos2D 联系起来。我认为这整个问题是当前版本的 Cocos2D 的一个限制,但是如果有人可以下载我的项目并以某种方式将过去两个链接的修复应用到我的项目并完全修复它,那就太好了,并且可以解决我的所有问题!

现在我项目中的 Cocos2D 版本是 2.0 版本可以下载的最新版本。如果有人愿意下载该项目并查看我做错了什么,我认为这将为我和其他遇到与我类似的问题的人解决问题。

下面的链接是我的问题示例项目的下载链接: http://www.gogofile.com/Default.aspx?p=sc&ID=634818635814123750_4340

更新于 2012 年 9 月 3 日,我目前只想联系 Cocos2D for iOS 的主要创建者 @riq。但是在我这样做之前,每个人都确定没有办法只拥有一个 CCGLView,我可以将它放在任何 UIViewController 中,因为从技术上讲,我不会使用两个视图,它只是控制器之间的一个共享视图。这种方式可行吗?

【问题讨论】:

  • 您的链接无效。你能发布一些相关的代码吗?
  • 您没有使用 cocos2d,因为它本来是打算使用的。使用 cocos2d 模板创建一个新项目并查看它。
  • 我看了很多遍,但我无法将整个项目转换为 Cocos2D。我需要我的自定义动画和一切。一定有办法让我的方式奏效。一个director是否只支持一个CCGLView?我是否应该将视图放在一个单例中并将其共享给其他控制器,这样行吗?
  • 如果有人知道此问题的修复或解决方法,我会加奖!

标签: ios opengl-es cocos2d-iphone views buffer


【解决方案1】:

好吧,我发现我几乎有 3 个选项

1. @Riq 告诉我,2013 年 5 月发布的 2.2 版将支持多个 CCDirector。所以请玩等待游戏,直到 2.2 测试版发布。 更新:2.1 最终版自 6 月中旬以来已经发布,所以我猜 2.2 测试版应该会在一两个月内发布。

2. 只需要一个 UIViewController 来保存 CCGLView。然后无论我需要什么 UIViewController 中的 glView ,我都会使用addChildViewController (iOS 5+),当我切换视图时我会保留 UIViewController 并且当时也只是做 replaceScene (可能在 UIView 动画完成回调中) .我认为这种方式也可以,但我不确定它的效率。

编辑:我已经使用并全面测试了这个解决方案,它似乎工作得很好。我建议这样做直到 2.2 出来。我的应用以 60FPS 运行,看起来不错。

3. 我个人没有尝试过任何这些链接/拉取请求,@Riq 也没有,所以这将是我最后的选择。 http://www.cocos2d-iphone.org/forum/topic/33480http://www.cocos2d-iphone.org/forum/topic/17821

【讨论】:

  • 你能分享你的任何代码来实现#2吗?我正在尝试复制这一点。谢谢!
【解决方案2】:

Director 仅支持一种 gl 视图。您要做的是一些技巧,例如抓取 gl 视图的屏幕截图以制作一个 uiview,您可以使用其他 uiview 进行转换,然后在一个真正的导演上更改您的场景,然后将其转换回。

对多视图的支持正在开发中,但可能需要几个月的时间。

【讨论】:

  • 如果你用这个技巧修改示例项目,并且它使用自定义 UIView 动画使用 addSubview 和 removeFromSuperview 在视图之间转换,我会给你赏金。我已经尝试了很多小时来做类似的事情,但我只是不知道从那里做什么。另外你怎么知道它正在开发中?为什么支持多个视图需要这么长时间?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2014-06-25
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多