Cocos 2d и Game Center (проблема со списком лидеров)

Я действительно не могу найти свой ответ после просмотра (не так много тем на cocos2d с игровым центром)

В настоящее время у меня настроен игровой центр для песочницы, и я могу пройти аутентификацию, но когда я создаю таблицу лидеров, она, как я полагаю, запускается боком в портретной ориентации. Пытался повернуть вид, но ничего. Моя игра работает только в ландшафтном режиме. Я использую beta 3 0.99.5. Вот мой код для справки.

tempVC = [[RootViewController alloc] init];

GKLeaderboardViewController *leaderboardController = [[[GKLeaderboardViewController alloc] init] autorelease];

if (leaderboardController != nil)
{
    leaderboardController.leaderboardDelegate = self;
    [[[CCDirector sharedDirector] openGLView] addSubview:tempVC.view];
    [tempVC presentModalViewController:leaderboardController animated:YES];
}

Действительно был бы признателен за любую помощь. Нет ответа от доски cocos2d.

РЕДАКТИРОВАТЬ:

Исправлено изменением автоповорота на CCDirector. Кроме того, у меня были проблемы с потерей функции мультитач после показа GameCenter. При увольнении за правление следует использовать следующее:

[tempVC dismissModalViewControllerAnimated:YES];
[tempVC.view.superview removeFromSuperview];

person Arbel    schedule 01.11.2010    source источник
comment
Спасибо ... Мне не удалось отклонить мою таблицу лидеров или достижения, и ваше РЕДАКТИРОВАНИЕ, приведенное выше, решило это за меня!   -  person jsherk    schedule 10.07.2012


Ответы (8)


= У меня была эта проблема, и я рвал волосы в течение нескольких дней, но в конце концов мне удалось добиться, чтобы она отлично работала в ландшафтном режиме, независимо от того, как пользователь держит телефон. Это немного странно, и если кто знает, дайте мне знать!

1 - У меня должен быть вид (контроллера, который вызывает таблицу лидеров) в портретной ориентации, в моем случае это сделано в IB

2 - Работает только в том случае, если вы поддерживаете портретную ориентацию (даже если она выглядит как альбомная) -

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

3 - Затем вам нужно изменить размер и повернуть таблицу лидеров -

[self presentModalViewController: leaderboardController animated: YES];

leaderboardController.view.transform = CGAffineTransformMakeRotation(CC_DEGREES_TO_RADIANS(0.0f));
leaderboardController.view.bounds = CGRectMake(0, 0, 480, 320);
leaderboardController.view.center = CGPointMake(240, 160);

4 - Эй, престо! Работает нормально. Надеюсь, это сработает и для вас.

person SomaMan    schedule 22.02.2011

Исправлено изменением автоповорота на CCDirector. Кроме того, у меня были проблемы с потерей функции мультитач после показа GameCenter. При увольнении за правление следует использовать следующее:

[tempVC dismissModalViewControllerAnimated:YES];
[tempVC.view.superview removeFromSuperview];
person Arbel    schedule 07.11.2011
comment
В качестве ответа предоставил свой комментарий ... см. Ниже. - person RoLYroLLs; 20.04.2012
comment
Исправлено изменением автоповорота на CCDirector, что это значит? - person Jonny; 10.06.2013

если это может помочь, я обнаружил, что простого удаления GKLeaderboard из супервизора на самом деле недостаточно, поэтому после использования

[tempVC.view.superview removeFromSuperview];

вы также должны использовать

[выпуск tempVC];

Без этого GKLeaderboardViewController делает некоторые странные вещи, например, после второго вызова он не вращается автоматически в представлении.

Я надеюсь это поможет

person Endre Olah    schedule 26.03.2012

Используя это в cocos2d v1.0.1, последней стабильной версии от 19 апреля 2012 года, это фактически не позволяет vc исчезать в анимации. Вероятно, вместо этого будет запущено это:

[tempVC dismissModalViewControllerAnimated:YES];
[[[tempVC view] superview] performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.2];
[tempVC performSelector:@selector(release) withObject:nil afterDelay:1.3];

person RoLYroLLs    schedule 19.04.2012
comment
Хороший ответ, но в недавнем обновлении iOS (iOS 4?) Теперь вы можете использовать блоки в этом методе, чтобы сделать его немного менее хакерским: [vc dismissViewControllerAnimated:(BOOL) completion:^(void)completion]; Пример: [tempVC dismissViewControllerAnimated:YES completion:^{ [tempVC.view removeFromSuperview]; [tempVC release]; }]; - person jmosesman; 03.07.2012

Правильным было реализовать и включить эту категорию:

.h

#import <GameKit/GameKit.h>

@interface GKLeaderboardViewController (additions)
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation;
-(NSUInteger)supportedInterfaceOrientations;
@end

.m

#import "GKLeaderboardViewController+additions.h"

@implementation GKLeaderboardViewController (additions)
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}
-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}
@end
person Jonny    schedule 10.06.2013
comment
Возможно, вы захотите создать одну и ту же категорию для GKGameCenterViewController, GKAchievementViewController и контроллера сопоставления. - person Jonny; 10.06.2013

Была такая же проблема с запуском GC в портретной ориентации на iPad, когда моя игра Cocos2D была в альбомной ориентации. Исправлено это путем получения моего контроллера GameKit от rootViewController вместо UIViewController.

@interface GCController: RootViewController {

person lil Z    schedule 07.11.2010
comment
Нет, у меня не сработало. Та же проблема. Похоже, что на самом деле вид GameCenter - горизонтальный, повернутый боком. Итак, у меня есть игра в альбомной ориентации с таблицей лидеров, которая занимает меньше половины экрана и выходит за пределы экрана. (Не уверен, что это имеет смысл?) Я в полной растерянности. - person Arbel; 07.11.2010

Когда у меня возникла такая же проблема, я подписался на блог Коннора Денмана, который мне подходит. Вот ссылка
http://connordenman.com/post/15554858770/presenting-a-modal-view-controller-in-cocos2d-iphone

person Ajit Satarkar    schedule 26.09.2012

GKLeaderboardViewController используется для отображения таблицы лидеров по умолчанию, которая является только портретной. Чтобы отобразить альбомную таблицу лидеров, вы должны реализовать собственное пользовательское представление таблицы лидеров.

Изменить: с момента первоначального написания этого GKLeaderboardViewController был улучшен, чтобы нормально работать в любой ориентации.

person Mr. Berna    schedule 01.11.2010
comment
Значит, тот, что в таких играх, как Angry Birds, полностью кастомизирован? Я не уверен, что понимаю. - person Arbel; 01.11.2010
comment
Angry Birds использует Crystal SDK для своей таблицы лидеров. crystaldk.com - person Mr. Berna; 01.11.2010
comment
Хммм, похоже, это не совсем правильно, если вы не о чём-то другом. После некоторой возни с вращениями по умолчанию в Cocos2d я добился правильного отображения таблицы лидеров в ландшафтном режиме. Однако мой UIScrollView на следующей сцене отображался неправильно. Понятия не имею, что происходит. - person Arbel; 02.11.2010
comment
Как вам удалось отобразить таблицу лидеров в альбомном режиме? - person jtalarico; 14.11.2010
comment
Это как-то связано с автоповоротом Cocos2d. Если я использую автоповорот CCDirector, он запускает таблицу лидеров в альбомной ориентации. Однако после увольнения у меня возникли другие проблемы, например, мультитач больше не работает. Если я использую вращение UIView по умолчанию, таблица лидеров запускается в портретной ориентации, но поворачивается боком. Никаких усилий по вращению я не делаю, меняю. - person Arbel; 15.11.2010