2

我有一款运行良好的游戏(大约 30 fps),但是当我尝试实施广告时,fps 下降了。我尝试了 Greystripe 和 iAds,但结果相同(iAds 可能更糟)。平均 fps 几乎相同,但始终存在巨大的峰值(每秒 1-2 个峰值)并且游戏无法玩。

我想这是因为广告在另一个视图中。我在某处读到 iphone 上的 opengl 应用程序不喜欢与它们有其他视图,但应用程序商店中有很多带有广告的游戏。他们是如何做到的呢?

我的实现应该没问题。我按照文档和样本告诉我的所有事情做了。我将我的 opengl 视图和广告视图作为应用程序窗口中的子视图,adview 位于 opengl 视图的前面,因此覆盖了它的一部分。这可能是问题吗?将opengl视图缩小到留给广告的空间是否更好,这样它们就不会重叠?你有什么其他想法可能是错的吗?

4

4 回答 4

1

Lope,我在此链接上创建了一个要点,其中包含我编写的用于使用 cocos2d 处理 iAd 的单例“AdManager”类。当然,Cocos2d 位于 OpenGL 之上,而且我发现即使对于相对复杂的游戏,这段代码也不会影响 FPS。

您必须对其进行一些修改以与您的应用程序一起使用,更改 cocos2d 调用等,但这将为您提供 iAd 的异步加载,这应该有助于解决 FPS 问题。

要使用此类,请包含其标题并调用

[[AdManager sharedManager] attachAdToView:self.view];

任何需要 iAd 的地方。在广告加载之前,广告将保持隐藏状态,届时它们会在屏幕顶部弹出。(该课程适用于 iOS 4.0、4.1 和 4.2)。

另外,我应该补充一点,我在我称之为“Cocos2DController”的整个 UIViewController 中运行了 cocos2d。当我将广告附加到 cocos2d 视图时,我正在使用

[[AdManager sharedManager] attachAdToView:[[CCDirector sharedDirector] openGLView]];

祝你好运!

于 2010-11-22T22:03:45.913 回答
0

我们可以对苹果的选择进行打击和错过,但一定要确保并在其他部分实施广告以吸引人而不是打扰。这对帧率和你来说会更好。

于 2010-11-22T21:19:39.657 回答
0

尝试在单独的低优先级线程中下载广告。因此,您可以确保广告加载不会占用太多 CPU 时间。通过一点 CPU 同步,您可以确保在新广告完全准备好展示之前不要尝试展示它。当然,它会从您尝试做的事情中吸走一些 CPU 时间,但要正确设置您的优先级,并且它只会在您忙于无所事事时吸走时间。

于 2010-11-22T21:55:11.997 回答
0

请原谅这里的线程坏死,但我已经使用 Stack Overflow 很多来帮助我解决我在编码过程中遇到的问题,并认为我的经验可能对将来的某人有用。

在我实施 AdWhirl(仅集成 AdMob + iAd)之前,我的简单 cocos2d 游戏以不错的 FPS 运行(很少改变 FPS 显示)。然后它在前几次迭代中运行良好,但在第 9 次或第 10 次场景刷新时(单屏游戏,每个场景中的时间平均 < 5 秒),FPS 会下降到 ~20FPS,并且每次场景再次下降神清气爽。

事实证明,在我的 n00biness 中(这对我来说可能是特别的 :)),我是从内部调用场景。也就是说,一旦动作完成,最后一个动作就是再次调用主场景(一种为用户重新构建场景的懒惰方式)。这初始化了我为重新处理 AdWhirl 广告而插入的视图和视图控制器,不仅内存泄漏,而且我有 10 多个视图控制器都试图从 AdWhirl 请求和服务广告。一旦我得到一个线索并把那个自引用循环拿出来,一切都很好。

于 2011-02-04T11:44:35.220 回答