About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jun

    11

    Graphics 非实时的绘图方法

    • 1 Comments
    • Flash Platform

    在 Flash IDE 环境下的舞台中,绘制任意一个矢量图形,并选择库中的任意一张位图填充,当该位图通过右键属性更新位图时,舞台上矢量图形的填充位图将会同步更新。但这种更新仅限于 IDE 的库元件编辑状态,并不代表 swf 文件在运行时 Graphics 也是实时更新位图数据填充的。

    事实上,Graphics 的所有绘画方式生成的矢量图形填充位图后都是静态的,“非活动/非实时”的(不同于 Bitmap 与 BitmapData)。如下样例代码:

    var b:BitmapData = new BitmapData1();

    stage.addEventListener(MouseEvent.CLICK, click);

    var g:Graphics = this.graphics;
        g.beginBitmapFill(b);
        g.drawRect(0,0,1000,1000);
        g.endFill();

    function click(event:MouseEvent):void
    {
        b = new BitmapData2();
        /*
        //如果不通过以下代码进行重绘,绘制的图形是不会动态更新填充的位图数据的
        g.clear();
        g.beginBitmapFill(b);
        g.drawRect(0,0,1000,1000);
        g.endFill();
        */

    }

    Graphics 要点:

    1、Graphics 绘图方法生成的矢量图形层级深度小于 0,任何层级深度小于 0 的对象在 AS3 中是无法获取引用的。

    2、每一个 Sprite 或 Shape 类型的对象都拥有唯一一个 Graphics 对象的引用(注意 Graphics 对象本身不是图形对象,它只是提供了绘制图形的方法)。

    3、Graphics 的绘图方法的每一步操作都会通过“记录”的形式被保存于 Graphics 对象中,操作的次数越多,记录的次数就越多,越占用系统资源。

    4、调用clear() 可清空一个 Graphics 对象的所有绘图操作记录,释放系统资源。 

    4、copyFrom(sourceGraphics:Graphics) 方法复制的是一个 Graphics 对象绘图操作“记录”,而不是图形对象本身。