【发布时间】:2014-03-01 13:14:09
【问题描述】:
我有一个使用 Stage3D 创建的基于 AIR 的游戏。我需要将我的 Stage3D 图层的一部分捕获或绘制到显示列表上的位图,但由于 Stage3D 图层存在于显示列表后面并且完全在显示列表之外,因此不知道如何执行此操作。
【问题讨论】:
标签: actionscript-3 bitmap air bitmapdata stage3d
我有一个使用 Stage3D 创建的基于 AIR 的游戏。我需要将我的 Stage3D 图层的一部分捕获或绘制到显示列表上的位图,但由于 Stage3D 图层存在于显示列表后面并且完全在显示列表之外,因此不知道如何执行此操作。
【问题讨论】:
标签: actionscript-3 bitmap air bitmapdata stage3d
查看drawToBitmapData():http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display3D/Context3D.html#drawToBitmapData()(Camera 上也有一个),这看起来就是你想要的。
如果您使用 Starling,您可以这样做:
阶段:
public static function takeScreenshot(scl:Number=1.0):BitmapData
{
var stage:Stage= Starling.current.stage;
var width:Number = stage.stageWidth;
var height:Number = stage.stageHeight;
var rs:RenderSupport = new RenderSupport();
rs.clear(stage.color, 1.0);
rs.scaleMatrix(scl, scl);
rs.setOrthographicProjection(0, 0, width, height);
stage.render(rs, 1.0);
rs.finishQuadBatch();
var outBmp:BitmapData = new BitmapData(width*scl, height*scl, true);
Starling.context.drawToBitmapData(outBmp);
return outBmp;
}
显示对象:
public static function copyToBitmap(disp:DisplayObject, scl:Number=1.0):BitmapData
{
var rc:Rectangle = new Rectangle();
disp.getBounds(disp, rc);
var stage:Stage= Starling.current.stage;
var rs:RenderSupport = new RenderSupport();
rs.clear();
rs.scaleMatrix(scl, scl);
rs.setOrthographicProjection(0, 0, stage.stageWidth, stage.stageHeight);
rs.translateMatrix(-rc.x, -rc.y); // move to 0,0
disp.render(rs, 1.0);
rs.finishQuadBatch();
var outBmp:BitmapData = new BitmapData(rc.width*scl, rc.height*scl, true);
Starling.context.drawToBitmapData(outBmp);
return outBmp;
}
来源:http://blog.flexwiz.net/tip-how-to-take-a-screenshot-in-starling/
【讨论】: