2012-03-29 60 views
0

我正在用Xcode使用Cocos2d 2.0fc0開發遊戲,並且我已經掛斷電話。我想在加載CCLayer/CCScene Game類時定義一個BOOL屬性來定義第二個玩家是本地玩家還是遠程玩家(Game Center)。問題是我不確定如何在這種情況下做到這一點。以下是我到目前爲止有:在CCScene中爲CCLayer設置屬性

@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

顯示代碼[RemoteGame init]layer.isRemote = b;之前調用。

[RemoteGame node]電話init方法在內部,並init檢查isRemote標誌(這是默認設置爲NO。當init完成調用layer.isRemote = b;但這並不設置委託。所以,你需要移動[GameCenterController sharedController].delegate = self;setIsRemote二傳手。

一般來說,你可以很容易地通過在調試器中使用「Watch variable」命令來檢查isRemote標誌是否被設置。

+0

對,完全有道理!我移動了代表命令,如上所述,國王如預期。謝謝! – Kris 2012-03-30 00:23:39