在CCScene中为CCLayer设置属性

时间:2012-03-29 02:25:00

标签: objective-c cocos2d-iphone

我正在使用Cocos2d 2.0fc0开发一个使用Xcode的游戏,我已经挂断了。我想在加载CCLayer / CCScene Game类时设置BOOL属性,以定义第二个玩家是本地玩家还是远程玩家(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 个答案:

答案 0 :(得分:1)

[RemoteGame init]之前调用显示的代码layer.isRemote = b;

[RemoteGame node]在内部调用init方法,init检查isRemote标记(默认设置为NOinit完成时您拨打layer.isRemote = b;但这不会设置委托。因此您需要将[GameCenterController sharedController].delegate = self;移至setIsRemote setter。

通常,您可以使用调试器中的“监视变量”命令轻松检查何时设置isRemote标志。