91 lines
3.1 KiB
Markdown
91 lines
3.1 KiB
Markdown
## 1.动态纹理类`egret.RenderTexture`
|
||
|
||
egret 中位图的显示基于纹理,通常静态纹理的获取方式有下面四种:
|
||
|
||
* 从已经创建出来的Bitmap中直接取 texture 属性。
|
||
|
||
* 通过 `RES.getRes("run_down_png");`(如果有使用Res模块)直接获取
|
||
|
||
* 通过URLLoader加载后获取
|
||
|
||
* 通过 ImageLoader 加载的,将获取的 data 赋值给 Texture 对象的 bitmapData.
|
||
|
||
除此之外,egret 提供了动态纹理类`egret.RenderTexture`,用来将显示对象及其子对象绘制成为一个纹理,以实现截图功能。
|
||
|
||
```javascript
|
||
var renderTexture:egret.RenderTexture = new egret.RenderTexture();
|
||
renderTexture.drawToTexture(displayObject);
|
||
```
|
||
|
||
|
||
## 2.方法
|
||
|
||
### 2.1.toDataURL()
|
||
`egret.RenderTexture`中的`toDataURL()`方法,将纹理转换成以 "data:image/png;base64," 开头的base64数据。
|
||
|
||
用法为: `texture.toDataURL("image/png", new egret.Rectangle(20, 20, 100, 100));`
|
||
|
||
* 第一个参数是所需要转成的格式,目前只支持 “image/png” 和 “image/jpeg”。
|
||
|
||
* 第二个参数是截取的区域,默认为`texture`整个大小。
|
||
|
||
> 注意:
|
||
因为是对`texture`本身进行的截取转换,所以即便`Bitmap`有缩放等变形操作,也不会影响`texture`截取区域的大小。
|
||
|
||
### 2.2.saveToFile()
|
||
`egret.RenderTexture`中的`saveToFile()`方法,裁剪指定区域并保存成图片。
|
||
|
||
用法为:`texture.saveToFile("image/png", "a/down.png", new egret.Rectangle(20, 20, 100, 100));`
|
||
|
||
* 第一个参数是图片格式
|
||
|
||
* 第二个参数是保存的文件名称(路径).
|
||
|
||
* 第三个参数是截取的区域
|
||
|
||
> 注意:
|
||
浏览器只支持保存名称,所以像 "a/down.png" 这种写法,浏览器会自动将其改成"a-down.png"。图片会保存在浏览器下载的位置。
|
||
|
||
> Native下是可以保存路径的。图片会保存在游戏的私有空间,路径中不能有 "../"。
|
||
这里为了兼容所有的平台,建议大家不要使用路径。
|
||
|
||
#### 示例
|
||
保存截屏测试,代码如下:
|
||
|
||
```javascript
|
||
var texture:egret.Texture = RES.getRes("run_png");
|
||
texture.saveToFile("image/png", "a/down.png", new egret.Rectangle(20, 20, 100, 100));
|
||
```
|
||
|
||
下面给出使用`saveToFile()`后生成的视图。
|
||
|
||
原图
|
||
|
||
![](55cd9c0ddeeb5.png)
|
||
|
||
截取后图
|
||
|
||
![](55cd9c0e37c9a.png)
|
||
|
||
### 2.3.drawToTexture()
|
||
|
||
`egret.RenderTexture`中的`saveToFile()`方法,将指定显示对象绘制为一个纹理
|
||
|
||
需要注意的是,这个方法会把当前的纹理清除,如果想要保留之前的纹理,需要使用 2 个 `RenderTexture` 交替绘制。
|
||
|
||
交替使用 `RenderTexture` 示例代码:
|
||
|
||
```javascript
|
||
if (this.bmp.texture == this.renderTexture) {
|
||
this.renderTexture2.drawToTexture(this, new egret.Rectangle(0, 0, 1024, 768));
|
||
this.bmp.texture = this.renderTexture2;
|
||
} else {
|
||
this.renderTexture.drawToTexture(this, new egret.Rectangle(0, 0, 1024, 768));
|
||
this.bmp.texture = this.renderTexture;
|
||
}
|
||
```
|
||
|
||
其中 `this.bmp` 是保存画板的位图对象,`this.renderTexture` 和 `this.renderTexture2` 是用来保存纹理的 `RenderTexture` 对象。
|
||
|
||
更新画板的纹理时使用与当前不同的 `RenderTexture` 对象保证上一次的纹理不被清空。
|