Arbel
Arbel

Reputation: 435

Cocos 2d and Game Center (Leaderboard issue)

I cant really find my answer after browsing (not a lot of topics on cocos2d with game center)

I currently have my sandbox game center set up and I am able to authenticate, but when I create the leaderboard it is launched sideways in portrait I assume. Tried rotating the view but nothing. My game runs only in landscape mode. I am running beta 3 0.99.5. Here is my code for reference.

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];
}

Really would appreciate any help. Getting no response from the cocos2d board.

EDIT:

Fixed by changing auto-rotation to CCDirector. Furthermore, I had issues with losing multi-touch functionality after showing gamecenter. The dismissal for the board should use this:

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

Upvotes: 6

Views: 6123

Answers (8)

Jonny
Jonny

Reputation: 16338

The correct was is to implement and include this category:

.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

Upvotes: 1

Ajit Satarkar
Ajit Satarkar

Reputation: 717

Once i was having the same problem, I followed the Connor Denman's blog which works for me Here is the link
http://connordenman.com/post/15554858770/presenting-a-modal-view-controller-in-cocos2d-iphone

Upvotes: 0

RoLYroLLs
RoLYroLLs

Reputation: 3215

Using this on cocos2d v1.0.1, latest stable version as of Apr 19th, 2012, this actually doesn't allow the vc to disappear animated. Probably running this instead:

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

Upvotes: 1

Endre Olah
Endre Olah

Reputation: 955

if it might help, I have found that simply removing the GKLeaderboard from the superview is not really enough, so after you use

[tempVC.view.superview removeFromSuperview];

you should also use

[tempVC release];

Without this the GKLeaderboardViewController is doing some weird things, like after the second call it is not auto rotating itself in the view.

I hope it help

Upvotes: 1

Arbel
Arbel

Reputation: 435

Fixed by changing auto-rotation to CCDirector. Furthermore, I had issues with losing multi-touch functionality after showing gamecenter. The dismissal for the board should use this:

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

Upvotes: 2

Mr. Berna
Mr. Berna

Reputation: 10655

A GKLeaderboardViewController is used to display the default leaderboard, which is a portrait only view. To display a landscape leaderboard, you have to implement your own custom leaderboard view.

Edit: Since the initial writing of this, GKLeaderboardViewController has been improved to work just fine in any orientation.

Upvotes: -1

SomaMan
SomaMan

Reputation: 4164

=I had this problem and was tearing my hair out for days, but I eventually got it to work perfectly in landscape mode, no matter what way the user is holding the phone. It's a bit weird, and if anyone knows better please let me know!

1 - I have to have the view (of the controller which calls the leaderboard) in portrait, in my case done in IB

2 - It only works if you support the portrait orientation (even if it looks like landscape) -

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

3 - You then need to resize & rotate the leaderboard -

[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 - Hey presto! It's working fine. Hope it works for you too.

Upvotes: 2

lil Z
lil Z

Reputation: 1

Had the same problem with GC launching in portrait on iPad when my Cocos2D game was in landscape. Fixed this by deriving my GameKit controller from rootViewController instead of UIViewController.

@interface GCController :RootViewController {

Upvotes: 0

Related Questions