平时如果对某个节点进行截图,会出现偏移的问题。我们可以先采用调整位置然后再截屏再调整回来。具体代码如下
capNode为要截图的节点
var texture = new cc.RenderTexture(capNode.width, capNode.height, cc.Texture2D.PIXEL_FORMAT_RGBA8888, gl.DEPTH24_STENCIL8_OES); // 新建渲染纹理
var pos = capNode.convertToWorldSpaceAR(cc.v2(0, 0));
var viewPort = capNode.getNodeToWorldTransform();//重要代码!!!
capNode.x -= viewPort.tx;
capNode.y -= viewPort.ty;
texture.setPosition(pos);
texture.begin(); // 开始渲染
capNode._sgNode.visit(); // 访问当前节点
texture.end(); // 渲染结束
texture.saveToFile(fileName, cc.ImageFormat.PNG, true, function () {
if (isAction) {
var node = new cc.Node();
var sp = node.addComponent(cc.Sprite);
var tex = cc.director.getTextureCache().addImage(fullPath)
var frame = new cc.SpriteFrame(tex);
sp.spriteFrame = frame;
node.x = pos.x;
capNode.x += viewPort.tx;
capNode.y += viewPort.ty;
node.y = pos.y;
var layer = cc.popupMgr.getInstance().getTopLayer();
node.parent = layer;
} else {
if (callBack) callBack(fullPath);
}