Делегировать проблемы с использованием GameKitHelper - cocos2d - PullRequest
1 голос
/ 19 ноября 2011

Я, наверное, слишком обдумываю это, но я застрял на этом некоторое время, поэтому я решил обратиться за советом / помощью.

Я использую GameKitHelper (http://www.learn -cocos2d.com / tag / gamekithelper / ), до сих пор это было довольно полезно. Итак, у меня есть помощник, инициализированный в моем "MainMenu" с внедренным протоколом, и т. Д .:

@interface MainMenu : CCLayer <GameKitHelperProtocol> {
    ...
    GameKitHelper *gkHelper;
}

В коде главного меню, у меня есть это:

    gkHelper = [GameKitHelper sharedGameKitHelper];
    gkHelper.delegate = self;
    [gkHelper authenticateLocalPlayer];

Кажется, довольно прямолинейно вперед. На самом деле, это работает именно так, как я ожидаю. У меня есть методы, которые он там ищет (даже при том, что у большинства из них нет кода, связанного с ними (пока?)). Моя проблема в том, когда я действительно хочу начать свою игру. Итак, я использую onMatchFound () для запуска игры, которая в основном работает:

-(void) onMatchFound:(GKMatch*)match
{    
    [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.2f scene: [[MultiplayerLoading initWithData:Multiplayer withMultiplayerType:gameTypeToPlay andInitiator:false] scene]]];

}

Моя проблема в том, что когда я пытаюсь играть в игру, метод получения удаления запускается в MainMenu, а не в игровом классе, поэтому все не рассчитывается должным образом. Можно ли передать элемент управления игровому слою из главного меню при срабатывании onMatchFound?

Надеюсь, это даст достаточно информации, дайте мне знать, если нет.

Спасибо всем!

Ответы [ 2 ]

0 голосов
/ 20 ноября 2011

Есть два способа сделать эту работу.Одним из способов является использование глобального класса Singleton в качестве делегата GameKitHelper.Затем вы можете передавать сообщения через этот класс Singleton.

Или просто назначить новую сцену в качестве делегата GameKitHelper:

-(void) onMatchFound:(GKMatch*)match
{   
    CCScene* newScene = [MyNewScene scene];
    [GameKitHelper sharedGameKitHelper].delegate = newScene;
    [[CCDirector sharedDirector] replaceScene:newScene];
}

Кроме того, похоже, что-то не так с тем, как высоздайте новую сцену:

[[MultiplayerLoading initWithData:Multiplayer
              withMultiplayerType:gameTypeToPlay 
                     andInitiator:false] scene];

Похоже, вы сначала вызываете метод init, а затем метод класса scene, который выделяет экземпляр (см. реализацию сцены).Для меня это выглядит так:

[[[MultiplayerLoading alloc] initWithData:Multiplayer 
                      withMultiplayerType:gameTypeToPlay 
                             andInitiator:false] autorelease];

Кстати, Руководство по кодированию какао рекомендует не "связывать" параметры метода с ключевым словом "и" и использовать "с"не раз это тоже довольно странно.Убран это должно быть скорее:

[[[MultiplayerLoading alloc] initWithData:Multiplayer 
                          multiplayerType:gameTypeToPlay 
                                initiator:false] autorelease];

Извините за придирчивость.:)

0 голосов
/ 19 ноября 2011

Может ли это быть потому, что ваше MainMenu установлено в качестве делегата в вашем GameKitHelper? Я бы попробовал установить делегата для игры внутри onMatchFound. Дайте этому попытку.

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