1

ゲームのスクリーンショットを共有する必要がある Facebook 用の cocos2d-JS でゲームを作成しています。

スクリーンショットを撮ることはできますが、base64 形式またはバイト配列が必要なため、Parse.com サーバーにアップロードできません。スプライトをこの形式に変換する解決策を見つけることができません..これが私のコードなので、addchildを実行すると適切な結果が得られます..コメント付きのコードも追加して、多くのことを試したことを理解するのに役立ちますしかし、同じことを達成できませんでした。

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();

},

実行できる回避策はありますか

4

2 に答える 2

1

オフスクリーン キャンバスのインスタンスである _cacheCanvas というプライベート変数があります。

あなたは簡単にできるrenderText._cacheCanvas.toDataURL()

于 2014-11-25T08:08:51.260 に答える
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
    }

外部ストレージの許可を忘れずに追加してください

于 2014-12-22T19:06:59.787 に答える