AIR- Stage3D для растровых данных
У меня есть игра на основе AIR, созданная с использованием Stage3D. Мне нужно захватить или нарисовать часть моего слоя Stage3D в растровом изображении в списке отображения, но, поскольку слой Stage3D существует за и полностью вне списка отображения, я не уверен, как это сделать.
1 ответ
Проверять, выписываться drawToBitmapData()
: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display3D/Context3D.html (также есть один на 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;
}
DisplayObject:
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/