CocosCreator 微信分享屏幕截图(IOS+安卓)完整解决方案!

微信分享图片,对缩略图的大小是有要求的,笔者被这个坑的很惨。笔者开发的游戏分辨率为1280*720,安卓缩略图大小为128*72,IOS缩略图大小为256*144.

笔者直接贴代码了,详细的注释代码里面都有的。

JS部分

cc.Class({

    properties: {
        _isCapturing: false, // 正在截图中标志
    },

    // 微信分享屏幕截图
    shareScreenshot: function () {
        // 网页端不支持
        if (cc.sys.isBrowser) {
            cc.log('网页端不支持微信分享~');
            return;
        }

        // 正在截图中判断
        if (this._isCapturing) {
            return;
        }
        this._isCapturing = true;

        // 截图文件判断
        var fileName = "shareScreenshot.jpg";
        var fullPath = jsb.fileUtils.getWritablePath() + fileName;
        if (jsb.fileUtils.isFileExist(fullPath)) {
            jsb.fileUtils.removeFile(fullPath);
        }

        // 截图并保存图片文件
        var size = cc.director.getWinSize(); // 获取视图大小
        var texture = new cc.RenderTexture(size.width, size.height); // 新建渲染纹理
        texture.setPosition(cc.p(size.width / 2, size.height / 2)); // 移动渲染纹理到视图中心
        texture.begin(); // 开始渲染
        cc.director.getRunningScene().visit(); // 访问当前场景
        texture.end(); // 渲染结束
        texture.saveToFile(fileName, cc.IMAGE_FORMAT_JPG); // 保存渲染纹理到图片文件

        // 延时50毫秒,检测截图文件是否存在
        // 重复10次这个过程,如果超过10次仍没检测到图片文件,截图失败(超时)
        var self = this;
        var tryTimes = 0;
        var fn = function () {
            if (jsb.fileUtils.isFileExist(fullPath)) {
                // 调用相应平台微信分享图片方法
                if (cc.sys.os === cc.sys.OS_ANDROID) {
                    jsb.reflection.callStaticMethod('org/cocos2dx/javascript/MyJsPlugin', 'shareIMG', '(Ljava/lang/String;)V', fullPath);
                } else if (cc.sys.os === cc.sys.OS_IOS) {
                    jsb.reflection.callStaticMethod('AppController', 'shareIMG:', fullPath);
                }
                self._isCapturing = false;
            } else {
                tryTimes++;
                if (tryTimes > 10) {
                    self._isCapturing = false;
                    cc.log('截图失败,超时~');
                    return;
                }
                setTimeout(fn, 50);
            }
        };
        setTimeout(fn, 50);
    },
});

安卓部分 继续阅读CocosCreator 微信分享屏幕截图(IOS+安卓)完整解决方案!

CocosCreator 打包安卓项目出现【dlopen failed: cannot locate symbol “rand” referenced by “libcocos2djs.so”】原因分析与解决方案!

首先,笔者使用的是最新的CocosCreator 1.5.1版本。开发环境是mac。

安装配置原生开发环境使用的是官网提供的教程

Cocos官网提供的安卓SDK包含三个版本的api,分别是10,20,22.

出现标题中的问题的原因是编译项目时选择了22的api。

解决方案很简单,编译项目时选择10的api就好了。

还有一个最简单的方法,CocosCreator 1.5.1版本已经提供了预编译库文件,选择模板的时候,选择binary就可以直接使用已经编译好的库文件了,这样速度会提高很多。

不过切换api的时候,别忘了把以前编译的东西删除掉。如果不知道删除啥,直接把当前项目下的build文件夹删除掉就可以了,这个是默认的发布路径。如果已经进行了安卓平台的开发的话,可以删除安卓项目目录下的obj文件夹。

PS:笔者特意测试了下,使用20版本的api也是可以编译成功的。不过这里的话,还是推荐使用10版本的api来进行编译。编译模板推荐使用binary,也就是使用预编译库文件,毕竟修改源码什么的,应该很少才对吧。如果想修改安卓api版本的话,可以先使用10版本的api编译出来,然后在安卓项目里面切换api版本,这样也不会有问题。

最后附上笔者打包发布的设置截图。

继续阅读CocosCreator 打包安卓项目出现【dlopen failed: cannot locate symbol “rand” referenced by “libcocos2djs.so”】原因分析与解决方案!

【转】Cocos2d-X学习——Android移植,使用第三方库.so被删掉问题

转自:http://blog.csdn.net/you_and_me12/article/details/27056579

2014-05-26

导语:Cocos2dx在安卓上移植的时候,加入第三方库,却发现新加的so库被删掉了

继续阅读【转】Cocos2d-X学习——Android移植,使用第三方库.so被删掉问题

使用cocos2d-x发布apk时遇到的问题以及解决方案

问题描述:

make.exe: *** No rule to make target `XXXX.cpp’, needed by `XXXX.o’. Stop.

问题原因分析:

首先,在Eclipse的安卓项目builders中默认有一个CDT Builder。而我们配置builders的时候会新建一个builder,新建的builder使用了ndk-build.cmd进行编译。

这两个builder的用途是一样的,编译c++。但是这两个编译器是不兼容的,使用其中一个编译后再使用另外一个编译的话会出现问题。

由于CDT Builder会自动编译,在我们配置新Builder的时候就已经编译了。然后我们配置结束后使用新的Builder编译时就会出现上面的这个问题。

问题解决方案:

关闭CDT Builder

删除proj.android文件夹下的obj文件夹

cocos2d-x事件类发布

在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。

在下通宵了一个晚上,写出了该事件类。

谨记,该事件只能用于cocos2d-x中。

事件发送者需要继承EventDispatcher类

事件接收者需要继承EventHandle类,还需要实现handleEvent方法

事件发送者和事件接收者要在构造函数和析构函数中调用一下方法

事件发送者和事件接收者必须是CCObject的子类

下载地址:http://download.csdn.net/download/lihaifei_/7341873