forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   iPhone (http://forum.boolean.name/forumdisplay.php?f=125)
-   -   iAd и iXors3D (http://forum.boolean.name/showthread.php?t=15169)

SBJoker 23.07.2011 22:30

iAd и iXors3D
 
Пытался встроить рекламу iAd в игру на основе iXors3D.
И потерпел жестокий фэйл. В мануалах сказано что баннер iAd требует себе в качестве контейнера UIViewController или любой его производный. Существующие производные подходят только для приложений. Для игр нет.

Ситуацию осложняет то что iXors3D базируется на GLView и нетребует вообще никаких контроллеров. Причём само GLView создаёт в окне сам.

Благодаря чему, мы неможем взять и запихать это GLView в контейнер UIViewController нападу с банером iAd.

Ещё кто-нибудь пробывал подружить сабжи?

.Squid 24.07.2011 02:07

Ответ: iAd и iXors3D
 
Там не GLView, а UIView. И вроде как с ним можно подружить iAd.
Я пока унылый нуб в этом деле, но http://www.raywenderlich.com/1371/ho...our-iphone-app тут вроде как именно этот процесс и описывается.

SBJoker 24.07.2011 15:08

Ответ: iAd и iXors3D
 
Есть кое-какие продвижения:

1. Написал свой класс-наследник UIViewController
2. Перенес создание xGLView ксорса в инициализацию своего контроллера, в которой контроллер создаваясь добавляет себя к окну. Далее создаёт xGLView ксорса и цепляет его к себе. Потом создаёт UIBannerView рекламы и цепляет к себе.
3. Создал реакции на события поворота устройства.

В результате, окно ксорса с игрой, над ним вью баннера.

Возникли проблемы с ландшафтным режимом. Т.к. изначально все вью в айФонах портретные, вью ксорса повернут на 90 градусов и частично невиден.
Применил трансформации поворота и сдвига, стало как надо.

Возникла проблема с вводом, при перевернутом экране ввод остаётся на прежнем месте, т.е. нет синхронизации между изображением и координатами ввода для окна ксорса. подозреваю что это делает сам ксорс.

З.Ы. вращение экрана средствами ксорса надо отключать иначе будет неразбериха.

Huly-Gun 24.07.2011 18:57

Ответ: iAd и iXors3D
 
кстати, а попутный вопрос:

кто-нить разобрался с интеграцией Game Center? В частности, с показом окон лидербордов и ачивментов? У меня получилось сделать только через отдельный вьюконтроллер, а сабвью с ксорсом просто прятать. Может, кто знает способ более прямой?

SBJoker 24.07.2011 19:14

Ответ: iAd и iXors3D
 
Я просто перед показом Лидборда нахожу сабвью с нулевым индексом и делаю его верхним. Это всегда оказывается свежедобавленый сабвью, что нам и нужно.

Как то так:
Код:

- (IBAction)showLeaderboard
{
    GKLeaderboardViewController *lb = [[GKLeaderboardViewController alloc] init];
   
    if (lb != nil) {
        lb.leaderboardDelegate = self;
        [self presentModalViewController:lb animated: NO];
       
        NSArray * subviews = [[[UIApplication sharedApplication] keyWindow] subviews];
        UIView * vLayer= [subviews objectAtIndex: 0];
        vLayer.hidden=false;
       
        [[[UIApplication sharedApplication] keyWindow] bringSubviewToFront: vLayer];
    }
}


alcoSHoLiK 26.08.2011 02:06

Ответ: iAd и iXors3D
 
Джокер, а зачем вручную искать сабвью? Когда ты вызываешь presentModalViewController, то новый контроллер по умолчанию занимает своим вью весь экран и рендерится поверх других вью, на то он и модальный.

SBJoker 26.08.2011 02:17

Ответ: iAd и iXors3D
 
Наверное по другому не работает.

alcoSHoLiK 26.08.2011 02:37

Ответ: iAd и iXors3D
 
Я впервые вижу такой хак. Для игр самое оптимальное иметь один вью контроллер, которому в качестве вью задается твой GLView. Это возможно, т.к. любой кастомный вью все равно наследует от UIView. Таким образом, то что в нем рендерится игра, не имеет никакого значения. С точки зрения иерархии, он является обычным вью без детей.

Поверх него можно показывать любой другой вью, в том числе айадс, любой модальный вью контроллер, алерт вью и так далее.

Если сходу не работает, видимо Xors что-то химичит с иерархией, в духе приведенного тобой фрагмента кода.

SBJoker 27.08.2011 01:37

Ответ: iAd и iXors3D
 
Тред не читай - сразу отвечай!

Ксорс не юзает ВьюКонтроллер, в этом вся и проблема. Собственно что мы и обсуждали всю тему.

Huly-Gun 06.10.2011 15:27

Ответ: iAd и iXors3D
 
Цитата:

Сообщение от SBJoker (Сообщение 196641)
2. Перенес создание xGLView ксорса в инициализацию своего контроллера, в которой контроллер создаваясь добавляет себя к окну. Далее создаёт xGLView ксорса и цепляет его к себе. Потом создаёт UIBannerView рекламы и цепляет к себе.

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

SBJoker 06.10.2011 15:41

Ответ: iAd и iXors3D
 
Как я написал выше, вьюконтроллер для этого у ксорса и баннера должен быть общим.
В этом случае баннер будет перехватывать управление только в занимаемой им зоне.

Huly-Gun 06.10.2011 17:17

Ответ: iAd и iXors3D
 
вроде получилось. просто надо было еще вью ксорса не просто запускать, но еще прилепить его как сабвью.


Часовой пояс GMT +4, время: 16:13.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot