Установка свойства для CCLayer в CCScene - PullRequest
0 голосов
/ 29 марта 2012

Я разрабатываю игру с XCode, используя Cocos2d 2.0fc0, и я застрял. Я хотел бы установить свойство BOOL при загрузке класса CCLayer / CCScene Game, чтобы определить, является ли второй игрок локальным или удаленным (Game Center) игроком. Проблема в том, что я не совсем уверен, как это сделать в сложившихся обстоятельствах. Вот что у меня так далеко:

@interface RemoteGame : CCLayer <GameCenterControllerDelegate> {
BOOL isRemote;
}

@property (assign, readwrite) BOOL isRemote;

+(CCScene *) sceneIsRemote: (BOOL) b;

-

@implementation RemoteGame

@synthesize isRemote;

+(CCScene *) sceneIsRemote: (BOOL) b {
CCScene *scene = [CCScene node];

    RemoteGame *layer = [RemoteGame node];
    layer.isRemote = b;
    [scene addChild: layer];

    return scene;
}


-(id) init {
    if((self=[super init])) {
        if (isRemote) {
            [GameCenterController sharedController].delegate = self;
        }
    }
}

Тогда я загружаю сцену так:

CCScene *trans = [CCTransitionFlipX transitionWithDuration:.75 scene:[RemoteGame sceneIsRemote: YES]];
[[CCDirector sharedDirector] replaceScene:trans];
[self presentGCTurnViewController];

Сцена загружается нормально, но BOOL настроен неправильно.

1 Ответ

1 голос
/ 29 марта 2012

В показанном коде [RemoteGame init] вызывается раньше layer.isRemote = b;.

[RemoteGame node] вызывает метод init внутри, а init проверяет флаг isRemote (который по умолчанию установлен на NO. Когда init завершает, вы вызываете layer.isRemote = b;, но это не устанавливает делегата. Поэтому вам нужно переместить [GameCenterController sharedController].delegate = self; в setIsRemote setter.

В общем, вы можете легко проверить, установлен ли флаг isRemote, используя команду «Переменная переменная» в отладчике.

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