cocos2d-x使用plugin-x

环境:cocos2d-x 2.2.3/XCode 5.1

创建plugin-x

1. 在cocos2d-x/plugin/plugins
创建目录(用plugin-x名称命名),下层创建目录proj.ios,工程就创建在proj.ios目录下。

2. 创建的方式是iOS->Framework & Library ->Cocoa Touch Static Library

3. 修改位置
XCode在创建程序的时候,会自动把工程所有文件放在一个与工程名同名的目录下,你需要把工程文件(*.xcodeproj)移动到proj.ios目录下

4. 工程设置 修改Target的Build Settings属性,找到Search Paths区域下的Header Search
Paths,双击右侧,弹出窗口如下:

点击“+”,添加红色下划线上的路径。

实现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.m


 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是Param1、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:@"接收到的信息"];

程序中

在监听器中处理

cocos2d-x使用plugin-x,布布扣,bubuko.com

时间: 2024-08-01 00:09:58

cocos2d-x使用plugin-x的相关文章

question --&gt; maven assembly plugin 修改文件默认权限

使用maven assembly plugin插件添加执行脚本时,发现默认权限为644,还需要手动添加执行权限.这很麻烦,于是查看文档 官方文档 http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_fileSet fileMode String Similar to a UNIX permission, sets the file mode of the files included. THIS IS

android-studio的gradle plugin配置相关的一些记录

感觉就是越高的Gradle版本对应的plugin越高. 你妹的,是不是2.10版本低于2.2版本,我还以为是2.10版本高于2.8.2.9版本呢.每次用2.10版本构建,用1.2.2等都不行.提示最低要求vesion为2.2,擦. classpath 'com.android.tools.build:gradle:1.2.2'//提示会有警告要求最底的Gradle版本是2.2,以上gradle版本为2.3,4,5,6....应该都可以,不过建议plugin本版不要过低,有些会不支持. class

[All in one WP Migration plugin] 搬迁wordpress 站点

为了方便大家去轻松的migrate 一个wordpress站点, 有developer开发出了一款插件----------All in one WP Migration ;这样大家就可以不用像之前一样要去分别备份数据库和网站文件了; 1. 首先, 在需要搬迁的旧站点和新站点的后台都需要去安装这个 All in one WP Migration plugin; 2. 在旧站点, 右键plugin, 点击export, 这样的操作是为了导出整个网站的备份文件. 需要注意的细节如下; 2.1> 点击右

cocos2d::Vector

v3.0 beta加入 定义在"COCOS2DX_ROOT/cocos/base"的"CCVector.h"头文件中. template<class T>class CC_DLL Vector; cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器. cocos2d::Vector<T>中的元素是按序存取的,它的低层实现数据结构是标准模版库中的标准顺序容器std::vector. 在Cocos2d-x v3.

No plugin found for prefix &#39;jetty&#39; in the current project and in the plugin groups

现在Jetty的版本已经到9了,也早已经在Eclipse的门下了.所以有很多groupId,比如:org.eclipse.jetty.org.mortbay.jetty.这些都可以用的哦. 我在使用MyEclipse结合maven操作jetty作为开发的服务器,这开开发比较方便. 当我运行命令: jetty:run 出现: [ERROR] No plugin found for prefix 'jetty' in the current project and in the plugin gro

Tomcat Maven Plugin部署Maven Web应用

Tomcat官方提供了Maven插件用于部署基于Maven的Web应用,不同版本Tomcat使用的插件不同,不同版本插件的使用也有一定区别,详细信息可参考http://tomcat.apache.org/maven-plugin.html.下面记录的是我在Eclipse环境中使用Tomcat Maven Plugin-2.2在Tomcat7中部署Maven Web应用的配置过程: 第一步:配置Tomcat manager用户: 打开Tomcat根目录下conf目录中的tomcat_user.xm

override Ext.grid.plugin.RowExpander的方法不起作用

Ext版本4.2 覆盖方法: Ext.override(Ext.grid.plugin.RowExpander, {     setCmp: function (grid) {         var me = this,             rowBodyTpl,             features;         console.log('我是盖子..');         me.callParent(arguments);         me.recordsExpanded 

maven 的plugin 的使用

mvn [plugin-name]:[goal-name] mvn compiler:compile 这里写的十分详细: https://www.tutorialspoint.com/maven/maven_quick_guide.htm-------------------------------------------- What are Maven Plugins? Maven is actually a plugin execution framework where every tas

Cocos2D中Action的进阶使用技巧(一)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 假设认为写的不好请多提意见,假设认为不错请多多支持点赞.谢谢! hopy ;) 大家对Cocos2d中动作的使用大概都非常清楚了,事实上本身action的概念也不复杂. 可是在某些情况下,一般的动作不能满足我们需求的时候,我们就必须使用更高级的Action方法来解决这个问题. 比方,串行化(不是序列化哦,这是两个全然不同的概念)不同Action的执行-有些童鞋可能会说非常easy,直接用CCActionSequence不就结了,可是等等我

Webpack-源码三,从源码分析如何写一个plugin

经过上一篇博客分析webpack从命令行到打包完成的整体流程,我们知道了webpage的plugin是基于事件机制工作的,这样最大的好处是易于扩展.社区里很多webpack的plugin,但是具体到我们的项目并不一定适用,这篇博客告诉你如何入手写一个plugin,然后分析源码相关部分告诉你你的plugin是如何工作.知其然且知其所以然. 该系列博客的所有测试代码. 从黑盒角度学习写一个plugin 所谓黑盒,就是先不管webpack的plugin如何运作,只去看官网介绍. Compiler和Co