cocos2dx內嵌gamecenter時的解決方案
阿新 • • 發佈:2019-02-18
然後,我們在
注意,如果在第一步你新建的類中有相應的方法來例項化gamecenter,或認證gamecenter,就用你寫的方法名。這裡並不唯一。
可以看到,我們在這個類聲明瞭重要的兩個方法。一是顯示排行榜 showLeadB 二是上傳分數reportTime
現在有沒有發現,我們又在c++語法函式中呼叫了oc呢?而且再也不會報錯了。
現在呼叫這個函式就能像使用其它c++函式一樣快捷的傳遞引數了。
現在不僅程式碼耦合性下降了,而且更清晰直觀。可見,使用巧妙的中間類"connect"串聯起了oc和c++類,這就像兩個國度的人各說各話,需要溝通時都去找翻譯,這樣就不會出糗了。
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++類,這就像兩個國度的人各說各話,需要溝通時都去找翻譯,這樣就不會出糗了。