如何在ActionScript 3.0中重绘形状?

时间:2012-01-08 19:58:39

标签: actionscript-3

我的问题是:如何仅使用代码重绘形状?

对任务本身的简短评论。我有一个eventListener,可以抓取舞台和舞台调整大小的点击。两者都执行相同的功能 - redrawEvents(evt:Event)。该阶段包含许多块,代表某些事件。在每次重绘时,这些块都会被重新定位,并且还会绘制线条(表示事件之间的连接)。

我找到了一种重新定位所有块的方法,但我不得不重新划线。

我使用单一形状来容纳所有线条,因为与块不同,线条不是交互式的。由于应用程序的整个要点是创建互连事件集,因此每次创建新块时都必须修改此形状,这也会调用重绘函数。

这是我用来修改形状的代码

stage.addEventListener(MouseEvent.CLICK,redrawEvents);

function redrawEvents (evt:Event) {
    var lines:Shape = new Shape();
    lines.graphics.lineStyle(2, 0xFFFFFF, .75);
    lines.graphics.clear();
    for (var k:int = 0; k < connections.length; k++){
        lines.graphics.moveTo(eventList[connections[k][0]].x + 50, eventList[connections[k][0]].y + 50);
        lines.graphics.lineTo(eventList[connections[k][1]].x + 50, eventList[connections[k][1]].y + 50);
    }
    addChild(lines);
}

然而,每当修改形状时,它仍会在屏幕上留下自己的“旧版本”,我不希望这样。我尝试创建和删除实例,varions类型转换,但仍然没有解决问题。

提前致谢

2 个答案:

答案 0 :(得分:3)

每次绘制线条时,都会向舞台添加新的Shape。您可以保留对它的引用并每次从显示列表中将其删除,或者在绘制新的行集之前使用一个实例和clear() Graphics方法。

答案 1 :(得分:0)

每次重绘时都在创建新的Shape实例吗? 你尝试过removeChild(行)吗?