AS3:graphics.clear的必要性?

时间:2015-12-12 16:57:18

标签: actionscript-3 memory graphics draw

我有一个函数,每次调用时都会重绘一个Shape

function drawIt():void {
  myShape.graphics.clear() //Is this necessary?
  myShape.graphics.beginFill(newColor);
  myShape.graphics.drawRect(0,0,w,h);
  myShape.graphics.endFill();
}

如果这个函数经常调用颜色而且我每次都不做graphics.clear(),我最终会在彼此的顶部堆积一大堆矩形来吃掉一堆存储器?

2 个答案:

答案 0 :(得分:2)

这是必要的,否则任何新的绘图都将添加到前一个绘图之上。如果这不是您需要的效果,那么您需要调用clear来删除任何先前的绘图。此行为可用于裁剪先前绘图的一部分。你可以绘制一个矩形,让我们说黑色,然后画一个圆圈(相同的颜色),结果是一个裁剪。

底线:如果你没有打电话清除所有绘图添加在彼此之上。

答案 1 :(得分:1)

要回答您的问题,请看一下这个简单的测试:

var init_memory:uint = System.totalMemory;

var shape:Shape = new Shape();
for(var i:int = 0; i < 1000; i++){
    shape.graphics.clear();
    shape.graphics.beginFill(0xff0000);
    shape.graphics.drawRect(0, 0, 10, 10);
    shape.graphics.endFill();
}

trace(System.totalMemory - init_memory);    // gives : 4096 (bytes)

让我们现在评论这一行:

//shape.graphics.clear();

我们得到:

trace(System.totalMemory - init_memory);    // gives : 102400 (bytes)

只有一个形状:

trace(System.totalMemory - init_memory);    // gives : 4096 (bytes)

我认为你不需要任何评论来理解为什么要使用graphics.clear() ......

希望可以提供帮助。