Cocos2d x 如何从RenderTexture Cocos2d JS获取byteArray或base64字符串

Cocos2d x 如何从RenderTexture Cocos2d JS获取byteArray或base64字符串,cocos2d-x,cocos2d-x-3.0,cocos2d-js,Cocos2d X,Cocos2d X 3.0,Cocos2d Js,我正在facebook的cocos2d JS上制作一个游戏,其中需要分享游戏的截图 我可以拍摄截图,但现在我无法将其上传到Parse.com服务器,因为它需要base64格式或字节数组。我无法找到将Sprite转换为此格式的任何解决方案。。这是我的代码,所以当我添加孩子时,结果是正确的。。我还添加了我的注释代码,这将有助于理解我已经尝试了很多东西,但没有达到同样的效果 shareToSocialNetworking: function () { cc.director.setNextD

我正在facebook的cocos2d JS上制作一个游戏,其中需要分享游戏的截图

我可以拍摄截图,但现在我无法将其上传到Parse.com服务器,因为它需要base64格式或字节数组。我无法找到将Sprite转换为此格式的任何解决方案。。这是我的代码,所以当我添加孩子时,结果是正确的。。我还添加了我的注释代码,这将有助于理解我已经尝试了很多东西,但没有达到同样的效果

shareToSocialNetworking: function () {

    cc.director.setNextDeltaTimeZero(true);

    var newsize = cc.director.getVisibleSize();

    var renderText = new cc.RenderTexture(newsize.width,newsize.height);

    renderText.begin();
    cc.director.getRunningScene().visit();
    renderText.end();
    var result = cc.Sprite.create(renderText.getSprite().getTexture());
    result.flippedY = true;
    this._mainViewNode.addChild(result,6000);

    //renderText.saveToFile("screenshot.jpg",cc.IMAGE_FORMAT_PNG);
    //var based = renderText.getSprite().getTexture().getStringForFormat().toString();
    //var data = based.getData();
    var file = new Parse.File("screen.jpg", { base64: this.getBase64(result) });
    //var file = new Parse.File("screen.jpg", data, "image/png");
    var self = this;

    file.save().then(function() {
        // The file has been saved to Parse.
        alert(file.url);
     this.onSharePictureInfoLink(file.url());

    }, function(error) {
        // The file either could not be read, or could not be saved to Parse.
    });


    //
    //var ccImage = renderText.newCCImage();
    //
    //var str = ccImage.getData();

},

是否有任何解决方法

有一个名为_cacheCanvas的私有变量,它是屏幕外画布的实例


您只需执行
renderText.\u cacheCanvas.toDataURL()

以下是如何从cocos2d JS获取screnshot

 screenshot: function (fileName) {
        var tex = new cc.RenderTexture(winSize.width, winSize.height, cc.Texture2D.PIXEL_FORMAT_RGBA8888);
        tex.setPosition(cc.p(winSize.width / 2, winSize.height / 2));
        tex.begin();
        cc.director.getRunningScene().visit();
        tex.end();

        var imgPath = jsb.fileUtils.getWritablePath();
        if (imgPath.length == 0) {
            return;
        }
        var result = tex.saveToFile(fileName, cc.IMAGE_FORMAT_JPEG);
        if (result) {
            imgPath += fileName;
            cc.log("save image:" + imgPath);
            return imgPath;
        }
        return "";
    }
然后从Javascript进行Java调用

 public static void ScreenShot()
    {
        Bitmap imageBitmap  = BitmapFactory.decodeFile(Cocos2dxHelper.getCocos2dxWritablePath() + "/" + "screenshot.png");

        String fileHolder = "SampleFolder";
        File filepathData = new File("/sdcard/" + fileHolder);

        //~~~Create Dir
        try {
                if (!filepathData.exists()) 
                {
                    filepathData.mkdirs();
                    filepathData.createNewFile();

                    FileWriter fw = new FileWriter(filepathData + fileHolder);
                    BufferedWriter out = new BufferedWriter(fw);
                    String toSave = String.valueOf(0);
                    out.write(toSave);
                    out.close();
                }
            } 
            catch (IOException e1) {

            }   

            //~~~Create Image
            File file = new File("/sdcard/" + "Your filename");

            try 
            {
                file.createNewFile();
                FileOutputStream ostream = new FileOutputStream(file);
                imageBitmap.compress(CompressFormat.PNG, 100, ostream);
                ostream.close();
            } 
            catch (Exception e) {}

            Uri phototUri = Uri.fromFile(file);
            Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND);
            shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri);
            //~~~Add Code Below
    }

不要忘记为外部存储添加权限

有趣!这能跨平台工作吗?或者有没有其他方法可以在Android上运行的cocos2d js应用程序中捕获屏幕截图?这太糟糕了。。你知道用-js制作的本地应用截图吗?吴浩这是一个有趣的答案,我正在使用canvas.toDataUrl,虽然它也起作用,@Sebastiánvansteenkister:我会给你写一个答案,让你用-js制作的本地应用截图js@Sebasti我已经添加了一个答案,如果有人想要他们可以参考..你可以试试这个:-你可以试试这个:-