cc.RenderTexture drawTextureAt 对于 texture 的要求

最近在使用 cc.RenderTexture 的时候,遇到一个这样的问题。
我用 cc.RenderTexture 做截图,然后可以把截取到的图片,赋值给 sprite 显示出来

spriteFrame.setTexture(renderTexture);

这个没问题。

现在我需要不停的截取图片,假设是 3次。每次截图内容都不一样。我想把他们都渲染出来。一个办法是搞 3个 spriteframe,这个肯定没问题。
但是后面如果不是3次是很多次的话,这个做法就不好了。
然后我发现 cc.RenderTexture 里面有 drawTextureAt 方法。

于是我就是了下,创建了个新的 cc.RenderTexture , 然后把每次截到的纹理调用 drawTextureAt 画到新的 cc.RenderTexture 上。

但是屏幕上什么都没有。

然后我看了下源码,发现 drawTextureAt 接受的 texture 貌似有要求

 drawTextureAt (texture, x, y) {
        if (!texture._image || texture._image.width === 0) return;
        // ......
 },

因为我打印了 _image 这个属性是 null。但如果是一个用 .png 图片的 sprite 的话,就可以正常 drawTextureAt ,因为它的 _image 是有值的 [object ImageBitmap]。

想问下有什么办法解决不?

我想把一个Texture2D 对象 一份为二变成两个Texture2D对象 看下这个对你由帮助没

感谢回复,你的帖子我也看到的,也试过了,你的 texturelist 里面的 texture 应该是普通的从图片加载来的纹理吧,我试过那个确实是可以的

我建了个简单的工程,想尝试在 touch 的地方用指定的图片纹理调用 drawTextureAt 渲染,但是碰到了一些问题。

项目很简单,我在 start 里面建了个 rt ,rtNode 是一个 普通的 node, 用来把 rt 的内容渲染出来

this.rt = new cc.RenderTexture();
this.rt.initWithSize(cc.winSize.width, cc.winSize.height);  
this.rtNode.getComponent(cc.Sprite).spriteFrame.setTexture(this.rt);

然后在一定的时候

touchMoveCallback (event) {
    var touches = event.getTouches();
    var touchLoc = touches[0].getLocation();
    this.rt.drawTextureAt(this.tex, touchLoc.x, 0); // 位置请无视,为了方便,只移动 x
    this.rtNode.getComponent(cc.Sprite).spriteFrame.setTexture(this.rt);
}

这样运行以后,可以跟着触摸画出图片,但是背景不是透明的会重叠,这是一个问题。

然后,如果在 start 的时候 不先调用一下 spriteFrame.setTexture,就会怎么画都没效果。

如果有大佬知道的,麻烦指点下,谢谢了

RenderTextureDemo.zip (283.7 KB)