2010-11-22 5 views
2

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

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

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

+0

Когда вы проверяете это с помощью инструментов (Time Profiler, OpenGL ES и т. Д.), Где вы видите горячие точки, когда реклама начинает замедлять работу? – 2010-11-22 23:04:52

ответ

1

Lope, я создал gist at this link с одноэлементным классом «AdManager», который я написал для обработки iAds с использованием cocos2d. Конечно, Cocos2d сидит поверх OpenGL, и я обнаружил, что этот код не влияет на FPS даже для относительно сложных игр.

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

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

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

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

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

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

Удачи!

0

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

+0

Это то, что я хотел бы сделать, но, к сожалению, не могу. Сроки, недальновидное управление и тому подобное :( – Lope 2010-11-22 21:33:19

+0

Так что это не техническая проблема, потому что решение это громоздко и ненадежно. Попробуйте человеческий путь и поговорите об этом, поверьте мне, это к лучшему. – Alfredo 2010-11-23 06:47:08

0

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

0

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

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

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