2012-03-29 10 views
0

私はCocos2d 2.0fc0を使ってXcodeでゲームを開発しています。私はハングアップしています。 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;の前に呼び出されます。 initはあなたがlayer.isRemote = b;を呼び出す完了する。デフォルトでNOに設定されているが、これはデリゲートを設定しません。あなたがsetIsRemoteセッターに[GameCenterController sharedController].delegate = self;を移動する必要がありますので。

[RemoteGame node]呼び出し内部init方法、およびinitチェックisRemoteフラグ(

isRemoteフラグが設定されているかどうかは、デバッガで「変数を監視」コマンドを使用して簡単に確認できます。

+0

これはまったく理にかなっています。期待どおりの王。ありがとう! – Kris