我的问题是:如何仅使用代码重绘形状?
对任务本身的简短评论。我有一个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类型转换,但仍然没有解决问题。
提前致谢
答案 0 :(得分:3)
每次绘制线条时,都会向舞台添加新的Shape
。您可以保留对它的引用并每次从显示列表中将其删除,或者在绘制新的行集之前使用一个实例和clear()
Graphics
方法。
答案 1 :(得分:0)
每次重绘时都在创建新的Shape实例吗? 你尝试过removeChild(行)吗?