2012-03-29 6 views
0

Ich entwickle ein Spiel mit Xcode mit Cocos2d 2.0fc0 und ich habe aufgelegt. Ich möchte beim Laden der CCLayer/CCScene Game-Klasse eine BOOL-Eigenschaft festlegen, um festzulegen, ob der zweite Spieler lokal oder ein entfernter Spieler (Game Center) ist. Problem ist, ich bin nicht genau sicher, wie man das unter den Umständen macht. Hier ist, was ich bisher habe:Festlegen einer Eigenschaft für einen CCLayer in einer CCScene

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

Dann bin Laden ich die Szene wie folgt:

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

Die Szene Lasten in Ordnung, aber die BOOL wird nicht richtig eingestellt.

Antwort

1

Im gezeigten Code wird [RemoteGame init] vor layer.isRemote = b; aufgerufen.

[RemoteGame node] Anrufe init Methode intern und init Kontrollen isRemote Flagge (die NO standardmäßig eingestellt ist. Wenn init vervollständigt Sie rufen layer.isRemote = b; aber dieser Delegat nicht festgelegt. So Sie [GameCenterController sharedController].delegate = self; in setIsRemote Setter bewegen müssen.

Im Allgemeinen können Sie leicht überprüfen, wenn isRemote Flag gesetzt ist mit "Watch Variable" -Befehl im Debugger.

+0

Richtig, das macht total Sinn! Ich habe den Delegierten Befehl wie Sie oben skizziert und die Dinge sind wor König wie erwartet. Vielen Dank! – Kris

Verwandte Themen