cocos2d-x使用plugin-x

環境: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, &param, 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:@"接收到的信息"];

程序中

在監聽器中處理

相關文章
相關標籤/搜索