非动态创建的sprite,可以从renderTexture获得sprite
但是动态创建的sprite,调用sprite.node._sgNode.visit()方法,没有从renderTexture获得sprite。不管是否设置Visible属性为true或者false。cocos新人请教。具体的代码再您的demo例子上修改的如下:
cc.Class({
extends: cc.Component,
properties: {
richText: cc.Component,
sprite4:cc.Component
},
// use this for initialization
onLoad: function () {
},
captureScreen: function () {
//注意,EditBox,VideoPlayer,Webview 等控件无法截图
var self=this;
var node = new cc.Node();
node.parent =this.node;
node.position = cc.v2(0, 0);
self.sprite = node.addComponent(cc.Sprite);
self.sprite.setVisible(false);
cc.loader.loadRes("style/0", cc.SpriteFrame, function (err,spriteFrame ) {
self.sprite.spriteFrame = spriteFrame;
})
node = new cc.Node();
node.parent =this.node;
node.position = cc.v2(60, 60);
self.sprite2 = node.addComponent(cc.Sprite);
self.sprite2.setVisible(false);
cc.loader.loadRes("style/1", cc.SpriteFrame, function (err,spriteFrame ) {
self.sprite2.spriteFrame = spriteFrame;
})
//如果待截图的场景中含有 mask,请开启下面注释的语句
// var renderTexture = cc.RenderTexture.create(1280,640, cc.Texture2D.PIXEL_FORMAT_RGBA8888, gl.DEPTH24_STENCIL8_OES);
var renderTexture = cc.RenderTexture.create(1280,640);
//把 renderTexture 添加到场景中去,否则截屏的时候,场景中的元素会移动
this.richText.node.parent._sgNode.addChild(renderTexture);
//把 renderTexture 设置为不可见,可以避免截图成功后,移除 renderTexture 造成的闪烁
renderTexture.setVisible(false);
//实际截屏的代码
renderTexture.begin();
//this.richText.node 是我们要截图的节点,如果要截整个屏幕,可以把 this.richText 换成 Canvas 切点即可
this.sprite.node._sgNode.visit();
this.sprite2.node._sgNode.visit();
//this.richText.node._sgNode.visit();
renderTexture.end();
//非动态创建的sprite,可以从renderTexture获得sprite
//问题,动态创建的sprite,调用sprite.node._sgNode.visit()方法,没有从renderTexture获得sprite。不管是否设置Visible属性为true或者false。
node = new cc.Node();
node.parent = this.node;
node.position = cc.v2(0, 0);
var sprite5 = node.addComponent(cc.Sprite);
sprite5.spriteFrame=renderTexture.getSprite().getSpriteFrame();//这里必须重新创建精灵,否则会报错
sprite5.node.setAnchorPoint(cc.p(0.3,0.3));
renderTexture.saveToFile("demo.png",cc.IMAGE_FORMAT_PNG, true, function () {
//把 renderTexture 从场景中移除
renderTexture.removeFromParent();
cc.log("capture screen successfully!");
});
//打印截图路径
}
});