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/

Другие вопросы по тегам