2014-11-24 83 views
1

我正在为cocos2d-JS上的Facebook创建游戏,其中需要共享游戏的屏幕截图。如何从RenderTexture获取byteArray或base64字符串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(); 

}, 

有没有可以做什么解决办法

+0

你可以试试这个: - https://stackoverflow.com/questions/44520608/how-to- get-sprite-pixel-alpha-information-in -cocos2d -js -c/45030826#45030826 – 2017-07-17 11:54:12

+0

你可以试试这个: - https://stackoverflow.com/questions/44520608/how-to-get-sprite-pixel- alpha-information-in-cocos2d-js-c/45030826#45030826 – 2017-07-17 11:55:23

回答

1

有一个私有变量叫_cacheCanvas,这是离屏画布的实例

,你可以简单地做renderText._cacheCanvas.toDataURL()

+0

有趣!这是否跨平台工作?或者,还有另一种方法可以捕获在Android上运行的cocos2d-js应用程序中的屏幕截图吗? – 2014-11-25 13:12:14

+0

这是html5 API,因此它不适用于本机应用程序的JSB。 – 2014-11-26 07:24:45

+0

这太糟糕了......您是否知道用-js制作的原生应用截图? – 2014-11-29 02:40:52

1

这里是如何你可以从cocos2d-JS取得骷髅图片

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 
    } 

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