iPhone Opengl игра с рекламой == fps проблема? - PullRequest
2 голосов
/ 23 ноября 2010

У меня есть игра, которая работает нормально, как есть (около 30 кадров в секунду), но fps потерял сознание, когда я попытался реализовать рекламу. Я попробовал Greystripe и iAds, но с тем же результатом (возможно, iAds были немного хуже). Средний fps почти одинаковый, но всегда есть огромные пики (1-2 пика в секунду), и игра не играбельна.

Полагаю, это потому, что реклама находится в другом представлении. Я где-то читал, что приложения opengl на iphone не любят иметь с ними другие представления, но в магазине приложений есть множество игр с рекламой. Как они это делают?

Моя реализация должна быть в порядке. Я сделал все как документация и образцы сказали мне. У меня есть мой вид opengl и вид рекламы как подпредставления в окне приложения, при этом adview находится перед видом opengl и, таким образом, покрывает его часть. Может ли это быть проблемой? Лучше ли сделать opengl view меньше, чтобы оставить место для рекламы, чтобы они не перекрывались? У вас есть другие идеи, что может быть не так?

Ответы [ 4 ]

1 голос
/ 23 ноября 2010

Лопе, я создал гист по этой ссылке с одноэлементным классом "AdManager", который я написал для обработки iAds с использованием cocos2d. Конечно, Cocos2d находится поверх OpenGL, и я обнаружил, что этот код не влияет на FPS даже для относительно сложных игр.

Вам придется немного изменить это, чтобы работать с вашим приложением, изменять вызовы cocos2d и т. Д., Но это даст вам асинхронную загрузку iAds, что должно помочь в проблеме FPS.

Чтобы использовать этот класс, включите его заголовок и вызовите

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

везде, где вам нужны iAds. Объявления будут оставаться скрытыми до тех пор, пока они не загрузятся, и тогда они появятся в верхней части экрана. (Класс работает для iOS 4.0, 4.1 и 4.2).

Кроме того, я должен добавить, что у меня работает cocos2d внутри общего UIViewController, который я называю «Cocos2DController». Когда я прикрепляю рекламу к представлению cocos2d, я использую

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

Удачи!

0 голосов
/ 04 февраля 2011

Пожалуйста, извините за нить, которая здесь не указана, но я много использовал Stack Overflow, чтобы помочь мне справиться с проблемами, возникшими во время кодирования, и подумал, что мой опыт может пригодиться кому-то в будущем.

Моя простая игра cocos2d работала с приличным FPS (редко менял отображение FPS вообще), пока я не реализовал AdWhirl (интегрируя только AdMob + iAd).Затем он будет работать нормально в течение первых нескольких итераций, но после обновления 9-й или 10-й сцены (одноэкранная игра, время в каждой сцене в среднем <5 секунд) FPS будет погружаться до ~ 20 FPS и снова падать каждый раз, когда сценаосвежился. </p>

Оказывается, в моем бодрости (это может быть особенным для меня :)), я вызывал сцену изнутри себя.То есть, после того, как действия были завершены, последним действием было снова вызвать основную сцену (ленивый способ перестроить сцену, чтобы пользователь мог сделать еще один шаг).Это инициировало просмотр и просмотр контроллеров, которые я вставил для обработки объявлений AdWhirl снова и снова, и у меня была не только утечка памяти, у меня было более 10 контроллеров представления, которые пытались запрашивать и обслуживать объявления от AdWhirl.Как только я получил ключ к разгадке и извлек эту петлю самоназванного, все было хорошо.

0 голосов
/ 23 ноября 2010

Попробуйте загрузить рекламу в отдельной ветке с низким приоритетом. Таким образом, вы можете быть уверены, что загрузка рекламы не займет слишком много процессорного времени. С некоторой частотой синхронизации процессора вы можете быть уверены, что не будете пытаться показывать новое объявление, пока оно не будет полностью готово к показу. Конечно, это отнимает некоторое время процессора из-за того, что вы пытаетесь сделать, но правильно расставляете приоритеты, и это должно отнимать время только тогда, когда вы ничего не делаете.

0 голосов
/ 23 ноября 2010

Мы можем поразить выбор Apple, но сделаем все возможное, чтобы реклама в других частях была привлекательной и не навязчивой. Это будет лучше для частоты кадров и для вас.

...