通过blitting提高性能

时间:2010-09-09 16:42:37

标签: actionscript-3 optimization

我对使用blitting图形有点新鲜。但是我自己编写了一些演示文稿,并且我一直在阅读有关所用方法的大量信息。

我所看到的一个共同主题是所有这些都是强力渲染;首先绘制最远的背面物体并踩过所有其他物体。甚至绘制将完全重叠的对象。

所有人都说这是因为任何类型的测试看到应该绘制的内容实际上需要花费更多的时间,而不仅仅是绘制所有内容而不进行检查。

是否有任何方法可以检测应该绘制的内容,哪种方式比仅绘制所有内容更快?

1 个答案:

答案 0 :(得分:0)

实际上很难确定检查应绘制的内容或绘制内容是否更快。你也许可以像一样使用它们如果有超过 5 的图像,使用绘图检查,如果没有,则全部绘制。 ......

所以 - 绘制它们的方法非常明显,而且关于绘制检查就像是:

// drawCheck
var w:int = 300;
var h:int = 200;

var result:Bitmap = new Bitmap(w, h);

for (var x:int = 0; x < w; x++){
    for (var y:int = 0; y < h; y++){
        result.bitmapData.setPixel32(x, y, 0x00FFFFFF);

        for (var iid:int = 0; iid < images.length; iid++){
            var resC:uint = result.bitmapData.getPixel32(x, y);
            var resA:uint = resC >>> 24;
            var resR:uint = resC >>> 16 & 0xFF;
            var resG:uint = resC >>> 8 & 0xFF;
            var resB:uint = resC & 0xFF;

            if (resA == 0xFF){
                break;
            }

            var oriC:uint = images[iid].bitmapData.getPixel32(x, y);
            var oriA:uint = oriC >>> 24 &;
            var oriR:uint = oriC >>> 16 & 0xFF;
            var oriG:uint = oriC >>> 8 & 0xFF;
            var oriB:uint = oriC & 0xFF;

            var newA:uint = resA + oriA;
            var newR:uint = (256 / resA) * resR + (256 / oriA) * oriR;
            var newG:uint = (256 / resA) * resR + (256 / oriA) * oriG;
            var newB:uint = (256 / resA) * resR + (256 / oriA) * oriB;

            var newC:uint = newA << 24 | newR << 16 | newG << 8 | newB;

            result.bitmapData.setPixel32(x, y, newC);
        }
    }
}

基本上,MAYBE绘图可能更快,但我不确定 - 按位操作......无论如何 - 你应该得到这个想法 - 这会循环通过X和Y坐标,最后通过图像。

注意:图像存储方式如下:0 =正面,images.length - 1 =返回

它检查( HERE )是否已通过检查alpha(如果它等于0xFF,没有使用绘图)完全绘制结果位图,如果不是,则它合并颜色并添加alpha。

你应该做一些性能测试,以便我们知道什么是更快的,什么时候......