Cocos2d-x+Plugin-X插件集成指南 cocos2d-x 2.13

来源:互联网 发布:不会聊天 知乎 编辑:程序博客网 时间:2024/06/15 21:57

最近cocos2d-x官网放出了plugin-x的官方指南,不过官网为了国际化,都是用英文写的,既然cocos2d-x的主要使用群体是中国人,而且是中国人主导的开发项目,为什么不考虑实际情况同步放出中文的指南呢?不得不说他们全英文的做法一下子就让B格提升了。下面开始正文

由于我的目的不是单纯地翻译官方的文章,所以请读者不要用原文翻译的标准来要求我,不喜勿看,欢迎来喷。

我的系统:mac osx Mountain Lion v10.8.2

cocos2d-x 2.1.3  路径为:/Users/yangdongbo/cocos2dx/cocos2d-x-2.1.3(下文用$COD_ROOT来代替)

原文地址:www.cocos2d-x.org/projects/cocos2d-x/wiki/Plugin-X_Integration_Guide_for_Android

系统要求

1.python 2.7 www.python.org/

2.Apache Ant build tool ant.apache.org/

3.如果你的系统是Windows,你还要已经安装好了Cygwin.

编译Plugin-X工程

1运行位于plugin/tools/publish.sh下的publish.sh脚本,(这个脚本的路径在我的电脑上和官方说的不太一样,官方说的是plugin-x/tools/publish.sh)据说这个脚本在Mac OSX Mountain Lion v10.8.2 和Cygwin on Windows 7上测试过运行良好.脚本运行之后会要求你填入一些环境变量的值,这些变量包括:

android-ndk path ,adnroid-sdk path, ant tool path,如果不清楚路径的可以用which来查找,例如在终端输入:which ant

来个截图会比较直观点:

 初次运行这个脚本会要求你输入android-ndk,adnroid-sdk ant 的系统路径,然后就编译插件所需要的文件,如果是再次运行的话就不用再次输入这些环境变量,因为它会自动把你输入的这些值保存到一个叫cocos2d-x-2.1.3/plugin/tools/toolsForPublish/environment.sh的文件里面。请大家把我输入的值自觉替换成自己系统变量的值,完全照输是一定会出错的。我这个路径是linux风格的,如果你使用的是windows系统的话,你应该输入像这样的路径C:/adt-bundle-windows/sdk而不是 C:\adt-bundle-windows\sdk

2,等编译完成之后你会发现多了一个叫publish的文件夹出现在plugin文件夹下面,如图:

3.publish文件夹包括:

 插件的头文件(*.h)

 C++静态库(*.a)

android的makefiles(*.mk)

android 工程所需要的一些插件

想使用插件的话要先修改你的游戏工程

要做些什么操作呢?

  • 修改.mk文件(Android.mk & Application.mk)链接到plugin-x生成的静态库
  • 修改android project的属性,链接plugin-x和第三方的SDK库(.jar文件)
  • 修改AndroidManifest.xml,增加activities的定义和游戏的user permissions。
  • 一些个别的插件我们需要增加一些外部配置和资源文件

游戏开发者的指导工具

我们有一个叫做gameDevGuide.sh的脚本,位于plugin/tools/gameDevGuide.sh。它会帮助你修改你的game project

1.在终端下运行这个脚本,然后它会弹出一个图形界面:

在输入框中输入你的android工程的路径,输入中不要带有空格,然后点'next'按钮

2,选择你所需要的插件,界面如下:

选择好插件之后,点击‘Finish'按钮。然后脚本会自动地修改你的工程的相关配置文件。下面的配置文件会被修改:

  • Android.mk ————– 增加依赖的C++ libs
  • Application.mk ———– 增加ndk build的参数
  • .project —————– 链接publish文件夹到工程的扩展资源
  • .classpath ————— 增加工程的java依赖库
  • AndroidManifest.xml ——增加declaration定义和工程中插件所需要的用户权限 

修改指导

1.修改ndk编译命令参数:增加publish文件夹参数到NDK_MODULE_PATH,可以这样写:

NDK_MODULE_PATH=${PLUGIN_ROOT}/publish

 

2.在JNI_Onload方法中加入代码,这样写:

1
2
3
4
5
6
7
8
9
#include "PluginJniHelper.h"
 
jint JNI_OnLoad(JavaVM *vm,void *reserved)
{
    JniHelper::setJavaVM(vm);
    PluginJniHelper::setJavaVM(vm); // for plugins
 
    returnJNI_VERSION_1_4;
}

3.当游戏的main activity创建的时候调用PluginWrapper.init()方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.cocos2dx.plugin.PluginWrapper;
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
public class HelloIAP extendsCocos2dxActivity{
  
     protectedvoid onCreate(Bundle savedState){
        super.onCreate(savedState);
        PluginWrapper.init(this);// for plugins
  
        // If you want your callback function can be invoked in GL thread, add this line:
        PluginWrapper.setGLSurfaceView(Cocos2dxGLSurfaceView.getInstance());
    }
 
    static{
        System.loadLibrary("game");
    }
}

4.个别特殊插件的修改

如果你的游戏用到下面的插件,那么你需要一些特殊的修改。

我们(官方)打算把这紫地修改加入到开发者指导工具中去。

  • nd91的修改

1.在eclipse中导入91SDK_LibProject_completep这个工程,这个工程的路径在cocos2d-x-2.1.3/plugin/publish/plugins/nd91/android/DependProject

2.让你的工程依赖91SDK_LibProject_complete工程,如下图所示:

在你的C++代码中使用plugin-x插件

加载和卸载插件

所有的插件都是PluginManager这个类托管的,你可以用插件名加载或是卸载一个插件,代码例子:

1
2
3
4
5
6
7
// load plugin IAPNd91
s_pNd91 = dynamic_cast<IAPNd91*>
(PluginManager::getInstance()->loadPlugin("IAPNd91"));
 
// unload plugin IAPNd91
PluginManager::getInstance()->unloadPlugin("IAPNd91");
s_pNd91 = NULL;

建议:在游戏开始的时候加载,在游戏结束的时候卸载

使用IAP插件

你可以调用插件的接口,在使用接口之前,你最好查看一下插件头文件的定义,代码例子:

1
2
3
4
// enable the debug mode
s_pNd91->setDebugMode(true);
// pay for the product
s_pNd91->payForProduct(info);

参考文件

1.plugin-x的HelloIAP工程中的代码

 

发现一个问题,当你运行gameDevGuide.sh脚本之后,它会删除jni文件夹下面Android.mk和Application.mk中的内容。这个做法本身是有问题的吧?官方并没有出来说明。但是经过我的试验和调试之后发现问题是因为mac os默认没有安装gawk这个命令,而上面说的工具中依赖于这个命令去对相关的配置文件操作。所以导致用一个空白的文件把原来的配置文件覆盖了,而原先的文件也没有备份。所以就产生了这种情况。只要安装了gawk这个工具就可以解决,我使用了如下命令来安装

port install gawk

如果你没有安装prot这个工具的话推荐你安装,具体的安装方法请自己搜索

2013-5-25我在使用官方的工具修改相应的工程配置的时候出现如下错误:

 

Traceback (most recent call last):

  File "/Users/yangdongbo/cocos2dx/cocos2d-x-2.1.3/plugin/tools/toolsForGame/modifyProject.py", line 32, in <module>

    tempText = locNode.text

AttributeError: 'NoneType' object has no attribute 'text'

估计这个错误的原因正如上面的出错信息所说,locNode没有一个名为text的属性,我确定了相关的文件.project里的内容是没有modifyProject.py里的32行开始那一段的要判断的内容之后我把它删除了,然后再执行就运行正常了。

好吧。下面遇到的问题就变成在eclipse里编译工程的时候出现的错误了:

 

Android NDK: /Users/yangdongbo/cocos2dx/cocos2d-x-2.1.3/test/proj.android/../../external/chipmunk/Android.mk: Cannot find module with tag 'protocols/android' in import path    

jni/Android.mk:27: *** Android NDK: Aborting.    .  Stop.

0 0
原创粉丝点击