Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > iPhone

iPhone Разработка игр на Objective-C

Ответ
 
Опции темы
Старый 23.07.2011, 22:30   #1
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
iAd и iXors3D

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

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

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

Ещё кто-нибудь пробывал подружить сабжи?
__________________
(Offline)
 
Ответить с цитированием
Старый 24.07.2011, 02:07   #2
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: iAd и iXors3D

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

(Offline)
 
Ответить с цитированием
Старый 24.07.2011, 15:08   #3
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: iAd и iXors3D

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

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

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

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

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

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

Последний раз редактировалось SBJoker, 24.07.2011 в 19:16.
(Offline)
 
Ответить с цитированием
Старый 24.07.2011, 18:57   #4
Huly-Gun
Оператор ЭВМ
 
Регистрация: 26.05.2009
Сообщений: 36
Написано 13 полезных сообщений
(для 65 пользователей)
Ответ: iAd и iXors3D

кстати, а попутный вопрос:

кто-нить разобрался с интеграцией Game Center? В частности, с показом окон лидербордов и ачивментов? У меня получилось сделать только через отдельный вьюконтроллер, а сабвью с ксорсом просто прятать. Может, кто знает способ более прямой?
(Offline)
 
Ответить с цитированием
Старый 24.07.2011, 19:14   #5
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: 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];
    }
}
__________________
(Offline)
 
Ответить с цитированием
Старый 26.08.2011, 02:06   #6
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Ответ: iAd и iXors3D

Джокер, а зачем вручную искать сабвью? Когда ты вызываешь presentModalViewController, то новый контроллер по умолчанию занимает своим вью весь экран и рендерится поверх других вью, на то он и модальный.
(Offline)
 
Ответить с цитированием
Старый 26.08.2011, 02:17   #7
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: iAd и iXors3D

Наверное по другому не работает.
__________________
(Offline)
 
Ответить с цитированием
Старый 26.08.2011, 02:37   #8
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Ответ: iAd и iXors3D

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

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

Если сходу не работает, видимо Xors что-то химичит с иерархией, в духе приведенного тобой фрагмента кода.
(Offline)
 
Ответить с цитированием
Старый 27.08.2011, 01:37   #9
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: iAd и iXors3D

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

Ксорс не юзает ВьюКонтроллер, в этом вся и проблема. Собственно что мы и обсуждали всю тему.
__________________
(Offline)
 
Ответить с цитированием
Старый 06.10.2011, 15:27   #10
Huly-Gun
Оператор ЭВМ
 
Регистрация: 26.05.2009
Сообщений: 36
Написано 13 полезных сообщений
(для 65 пользователей)
Ответ: iAd и iXors3D

Сообщение от SBJoker Посмотреть сообщение
2. Перенес создание xGLView ксорса в инициализацию своего контроллера, в которой контроллер создаваясь добавляет себя к окну. Далее создаёт xGLView ксорса и цепляет его к себе. Потом создаёт UIBannerView рекламы и цепляет к себе.
Сейчас занимаюсь тем же, интегою iAds. Пошел по такому же пути.
Но столнулся с траблой - если поверх слоя ксорса показывать слой с баннером, ксорс, разумеется, перестает реагировать на нажатие экрана, так как управление перехватывает вьюконтроллер с баннером. Как ты эту ситуевину разрулил? Мне в голову ничего умнее переноса кнопок и др. элементов управления на слой с баннером не пришло.
(Offline)
 
Ответить с цитированием
Старый 06.10.2011, 15:41   #11
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: iAd и iXors3D

Как я написал выше, вьюконтроллер для этого у ксорса и баннера должен быть общим.
В этом случае баннер будет перехватывать управление только в занимаемой им зоне.
__________________
(Offline)
 
Ответить с цитированием
Старый 06.10.2011, 17:17   #12
Huly-Gun
Оператор ЭВМ
 
Регистрация: 26.05.2009
Сообщений: 36
Написано 13 полезных сообщений
(для 65 пользователей)
Ответ: iAd и iXors3D

вроде получилось. просто надо было еще вью ксорса не просто запускать, но еще прилепить его как сабвью.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com