環境:cocos2d-x 2.2.3/XCode 5.1ios
建立plugin-xxcode
1. 在cocos2d-x/plugin/plugins 建立目錄(用plugin-x名稱命名),下層建立目錄proj.ios,工程就建立在proj.ios目錄下。app
2. 建立的方式是iOS->Framework & Library ->Cocoa Touch Static Library函數
3. 修改位置 XCode在建立程序的時候,會自動把工程全部文件放在一個與工程名同名的目錄下,你須要把工程文件(*.xcodeproj)移動到proj.ios目錄下ui
4. 工程設置 修改Target的Build Settings屬性,找到Search Paths區域下的Header Search Paths,雙擊右側,彈出窗口以下:url
點擊「+」,添加紅色下劃線上的路徑。spa
實現cocos2d-x根目錄/plugin/protocols/platform/ios目錄下定義的協議。這裏繼承InterfaceSocial插件
頭文件PluginTest.h命令行
1 #import <Foundation/Foundation.h> 2 #import "InterfaceSocial.h" 3 4 @interface PluginTest2 : NSObject<InterfaceSocial> 5 6 #pragma mark - InerfaceSocial協議定義的方法 7 - (void) configDeveloperInfo : (NSMutableDictionary*) cpInfo; 8 - (void) share: (NSMutableDictionary*) shareInfo; 9 - (void) setDebugMode: (BOOL) debug; 10 - (NSString*) getSDKVersion; 11 - (NSString*) getPluginVersion; 12 13 #pragma mark - 自定義方法和屬性 14 - (void) someMethod; 15 - (void) anotherMethod:(NSMutableDictionary *)dict; 16 17 @end
m文件PluginTest.mdebug
1 #import "PluginTest.h" 2 #import "SocialWrapper.h" 3 4 @implementation PluginTest2 5 6 - (void) configDeveloperInfo : (NSMutableDictionary*) cpInfo{} 7 - (void) share: (NSMutableDictionary*) shareInfo{} 8 - (void) setDebugMode: (BOOL) debug{} 9 - (NSString*) getSDKVersion 10 { 11 return @"1.0"; 12 } 13 - (NSString*) getPluginVersion 14 { 15 return @"1.0.1"; 16 } 17 - (void) someMethod 18 { 19 NSLog(@"someMethod"); 20 [SocialWrapper onShareResult:self withRet:kShareSuccess withMsg:@"接收到的信息"]; 21 } 22 - (void) anotherMethod:(NSMutableDictionary *)dict 23 { 24 for (NSString *str in [dict allValues]) 25 { 26 NSLog(@"%@", str); 27 } 28 } 29 30 @end
建立和設置使用plugin-x的程序
1. 使用命令行建立一個cocos2d-x程序SomeGame
2. 添加項目引用 添加ProtocolProtocol(路徑是cocos2d-x根目錄/plugin/protocols/proj.ios)和PluginTest項目的引用,或者直接添加兩個項目的靜態庫。
添加程序應用的方法,打開SomeGame項目,在目錄中找到要添加引用的項目,而後把工程文件拖拽到SomeGame項目中便可;或者右鍵點擊程序,選擇,添加文件,選取要添加引用的項目的工程文件。
3. 修改工程配置
Target->Build Settings->Linkings->Other Linker Flags 雙擊右側,添加-ObjC
Target->Build Settings->Search Paths->Header Search Paths 雙擊右側,添加$(SRCROOT)/../../../plugin/protocols/include
Target->General->Linked Framework and Libraries 點擊左下方的「+」按鈕,彈出以下圖
workspace下的*.a文件所有添加,另外還要添加一個SystemConfiguration.framework
4. 添加代碼調用plugin-x
建立監聽器類
1 class UDListener : public ShareResultListener 2 { 3 void onShareResult(ShareResultCode ret, const char* msg) 4 { 5 if (ret == kShareSuccess) 6 { 7 CCLOG("msg = %s", msg); 8 } 9 } 10 };
調用plugin-x
1 #include "PluginManager.h" 2 #include "ProtocolSocial.h" 3 #include "PluginParam.h" 4 #include "cocos-ext.h" 5 6 USING_NS_CC; 7 USING_NS_CC_EXT; 8 using namespace cocos2d::plugin; 9 10 void HelloWorld::invokePluginx() 11 { 12 ProtocolSocial *pluginTest = dynamic_cast<ProtocolSocial *>(PluginManager::getInstance()->loadPlugin("PluginTest")); 13 UDListener * listener = new UDListener; 14 pluginTest->setResultListener(listener); 15 PluginParam url("http://www.baidu.com"); 16 PluginParam param("hehe"); 17 pluginTest->callFuncWithParam("someMethod", NULL); 18 pluginTest->callFuncWithParam("anotherMethod", &url, ¶m, NULL); 19 }
程序與plugin-x交互
1. 程序調用插件是經過callFuncWithParam以及相關的方法,傳參數是經過PluginParam,相似上面代碼中的18行,傳遞多個參數就直接寫在方法中,在plugin-x中獲得的是NSMutableDictionary *類型的字典,參數值是value,key是Param一、Param2....。若是傳遞的是一個參數,則參數的類型只能是int、float、bool、const char *,plugin-x接收到的類型是NSNumber、NSNumber、NSNumber、NSString
2. plugin-x反饋給程序,能夠經過函數返回值。
舉個栗子:
plugin-x中
int returnInt(NSNumber * a)
{
int num = [a intValue];
return num*2;
}
程序中
PluginParam a(5);
int num = pluginTest->callIntFuncWithParam("returnInt", &a, NULL);
CCLOG("num = %d", num);
輸出結果是10
或者經過SocialWrapper
plugin-x中
[SocialWrapperonShareResult:selfwithRet:kShareSuccesswithMsg:@"接收到的信息"];
程序中
在監聽器中處理