1. 程式人生 > >cocos2dx內嵌gamecenter時的解決方案

cocos2dx內嵌gamecenter時的解決方案

然後,我們在

boolAppDelegate::applicationDidFinishLaunching()

這個方法中,插入登陸語句。其實就是去呼叫我們第一步寫好的類的函式。

[[MyGameHelper sharedGameKitHelper] authenticateLocalUser];

注意,如果在第一步你新建的類中有相應的方法來例項化gamecenter,或認證gamecenter,就用你寫的方法名。這裡並不唯一。

第三步 新建中間類,並在需要使用gc的其它類中上傳分數 (顯示排行榜)

這一步比較關鍵,也是整個思維過程的重點。

我們再次新建一個OC類。不妨將其命名為和我一樣的connect 。取意“連線”。

標頭檔案:

//
//  connect.hpp
//  developer @fengzhengfang
//
//  Created by lanshubao on 15/12/30.
//
//

#ifndef connect_h
#define connect_h

#include <stdio.h>
class connect
{
public:
    static void showLeaderB();
    static void reportTime(int64_t score,const char* identifier);
    static void openURL();
};

#endif /* connect_hpp */

可以看到,我們在這個類聲明瞭重要的兩個方法。一是顯示排行榜 showLeadB  二是上傳分數reportTime

注意,我們也需要把這個類的字尾換為.mm

接著,我們在這個類的實現中匯入第一步寫好的gc的標頭檔案

然後呼叫它。

void connect::showLeaderB(){
    //gamecenter
    [[MyGameHelper sharedGameKitHelper] showLeaderboard];
    
}
void connect::reportTime(int64_t score,const char* identifier){
    //const char *id=identifier.c_str();
    //NSString *str= [NSString stringWithCString:identifier.c_str()encoding:[NSString defaultCStringEncoding]];
    NSString * string = [NSString stringWithFormat:@"%s", identifier];
    [[MyGameHelper sharedGameKitHelper] reportScore:score forLeaderboardID:string];
   
}

現在有沒有發現,我們又在c++語法函式中呼叫了oc呢?而且再也不會報錯了。

*大家可根據自己的需要來決定傳遞的引數。註釋部分提供了將char轉化為nsstring的方法。

好啦。接下來,我們來看看上傳分數的具體實現吧:

我們在要上傳分數的類中只需要引入“connect.h”這個檔案即可,不再需要像其他帖子中使用的多個類,而導致編譯報錯。

有多簡單?就這麼兩句話:

//將記錄直接上傳gamecenter
    std::string cc="chapter1";
    const char *kk=cc.c_str();
    connect::reportTime(totaltime, kk);

現在呼叫這個函式就能像使用其它c++函式一樣快捷的傳遞引數了。

顯示呢?更簡單了:

 connect::showLeaderB();


現在不僅程式碼耦合性下降了,而且更清晰直觀。可見,使用巧妙的中間類"connect"串聯起了oc和c++類,這就像兩個國度的人各說各話,需要溝通時都去找翻譯,這樣就不會出糗了。