2011-05-20 63 views
0

所以我加入了一些本地藍牙與網絡的GameKit,和這裏的一些問題,我想象,希望你能告訴我,爲什麼他們是虛構的:將GKSession傳遞給新的CCLayer對象?

我GKPickerController得到由我的菜單,一個CCLayer對象是推出被推送到CCSharedDirector。一旦GKPickerController建立了連接,它就會將GKSession傳遞給我的菜單層。

所以現在整個會話都屬於我的菜單,但我想將數據放入其他CCLayer對象(如遊戲本身!)。我如何使GKSession成爲全球?我可以簡單地添加一個方法並將整個Session傳遞給新的CCLayer子類嗎?這會保留整個會議嗎?

感謝提前一噸,我有一個爆炸!

回答

2

爲什麼不用一個sharedInstance方法創建一個類,讓這個類可以完成所有的全局工作?

喜歡的東西:

@interface GameController : NSObject { 
    GKSession *gamekit_session; 
} 

+ (GameController *)sharedInstance; 

- (void)initGameKitSession:(NSDictionary *)config; 

- (GKSession *)getGameKitSession; 

- (BOOL)isMyKittenAlive; 

- (void)shutdownTheInternet:(BOOL)orly; 

- (float)getGlobalWarmingTemperature; 

- (void)doSomeOtherGlobalStuff; 

@end 

這樣,所有的CCLayers可以通過調用[[GameController sharedInstance] getGameKitSession];訪問該GKSession。使用這種技術更安全,更優雅,而不是通過GKSession左右(我無法想象保留/釋放地獄,你將步入....)

+0

我真的很想知道這個..我想我只是不完全理解類方法。我的印象是,如果你調用sharedInstace(在你的情況下),你會得到一些恆定的響應,僅由類定義。你告訴我的是,它會通過我在原始GameController實例中分配的任何內容嗎?如果有多個GameController實例呢?編譯器如何知道如何響應我的[[GameController sharedInstance] getGameKitSession]調用呢? – DanF 2011-05-24 04:12:42

+1

@DanF你只需要實現sharedInstance方法只創建一次實例並將其存儲在一個靜態變量中。當第二次調用時,你可以返回靜態變量。而且由於你是使用它的人,你應該自律來總是使用sharedInstance方法而不是alloc/init方法。看看CCDirector如何實現sharedDirector方法。這是一個概念。 – Lukman 2011-05-24 04:24:00

+0

這就是靜態的意思!並且引用sharedDirector非常有意義。作爲一個非常新的編碼器,我仍然獲得了挖掘和反向工程方法的信心,我不明白。我非常欣賞這一指導,缺乏全球變數讓我失望。 – DanF 2011-05-24 08:05:59