Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何在ActionScript 3.0中重新绘制形状?_Actionscript 3 - Fatal编程技术网

Actionscript 3 如何在ActionScript 3.0中重新绘制形状?

Actionscript 3 如何在ActionScript 3.0中重新绘制形状?,actionscript-3,Actionscript 3,我的问题是:如何仅使用代码重新绘制形状 对任务本身的简短评论。我有一个eventListener,它可以捕捉舞台上的点击并调整舞台大小。两者执行相同的函数-重画事件(evt:Event)。该阶段包含多个表示特定事件的块。在每次重画时,这些块都会重新定位,并且还会绘制线(表示事件之间的连接) 我已经想出了一个方法来重新定位所有的块,但我被困在重新绘制线 我使用一个形状来保存所有的线,因为线与块不同,不是交互的。由于应用程序的整个要点是创建相互关联的事件集,因此每次创建新块时,我都必须修改此形状,这

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

对任务本身的简短评论。我有一个eventListener,它可以捕捉舞台上的点击并调整舞台大小。两者执行相同的函数-
重画事件(evt:Event)
。该阶段包含多个表示特定事件的块。在每次重画时,这些块都会重新定位,并且还会绘制线(表示事件之间的连接)

我已经想出了一个方法来重新定位所有的块,但我被困在重新绘制线

我使用一个形状来保存所有的线,因为线与块不同,不是交互的。由于应用程序的整个要点是创建相互关联的事件集,因此每次创建新块时,我都必须修改此形状,这也会调用redraw函数

下面是我用来修改形状的代码

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);
}
stage.addEventListener(MouseEvent.CLICK,重画事件);
函数重绘事件(evt:Event){
变量行:形状=新形状();
线条。图形。线条样式(2,0xFFFFFF,.75);
lines.graphics.clear();
for(var k:int=0;k
然而,每当形状被修改时,它仍然会在屏幕上留下自己的“旧版本”,我不希望这样。我试图创建和删除实例,变量类型转换,但仍然没有解决问题


提前感谢

每次画线时,您都会在舞台上添加一个新的
形状
。您可以保留对它的引用并每次将其从显示列表中删除,或者在绘制新的线条集之前只使用一个实例和
Graphics
方法。您可以保留对它的引用并每次将其从显示列表中删除,或者只使用一个实例和
Graphics
Graphics
方法,然后再绘制新的线条集。

您是否每次都在重绘时创建新的形状实例?
是否尝试删除Child(线条)?

是否每次在重画时都创建新的形状实例?

您是否尝试过删除child(lines)?

我尝试过,但这会删除形状的instace,并且我始终需要在舞台上保留一个实例,显示形状之间的连接objects@Loki:您需要在添加新实例之前删除旧实例。显然,我必须在修改形状之前删除子实例,并在修改后创建一个新的子级。尽管如此,当我尝试这样做时,我还是犯了一个错误,说我不能删除一个不存在的子项。@Loki:如果你将这个变量设为局部变量会怎么样。放置
var行:形状
在设置CLICK listener之前,在重画函数中,您将执行:
如果(包含(行)){removeChild(行);lines=new Shape();}
我已经检查了这个东西,并记下了
包含的方法,非常感谢,这将在我以后的开发中派上用场,但这会删除形状的安装,我总是需要在舞台上保留一个实例,显示objects@Loki:您需要在添加新实例之前删除旧实例。显然,我必须在修改形状之前删除子实例,并在修改后创建新子实例。尽管如此,当我尝试这样做时,我还是犯了一个错误,说我不能删除一个不存在的子项。@Loki:如果你将这个变量设为局部变量会怎么样。放置
var行:形状
在设置CLICK listener之前,在redraw函数中,您将执行:
如果(包含(行)){removeChild(行);lines=new Shape();}
我已经检查了这件事,并记下了
包含的方法,非常感谢,这将在我以后的开发中派上用场。我已经更新了那里的代码,并回复了evilguy。不过,要么我做错了什么,要么这些建议根本解决不了我的问题。现在我在舞台上没有任何行:)@Loki
lines
是事件处理程序的本地变量-您正在对
Shape
的一个新实例调用
clear()
,因此您唯一要清除的是行样式。您需要将
设置为类字段(或将其保留在某个位置),仅实例化一次(不是每次事件触发时),并在任何其他绘图命令之前调用
clear()
。好的,那么,假设我将把
线型
定义与全局变量放在一起,在
重画事件之外
。那么,如何在此函数中访问
?您只需执行
行.graphics.clear()
行.graphics.lineStyle(无论什么)
,然后执行事件处理程序中的绘图命令。初始化后不需要调用
lineStyle
,因为它会被事件处理程序中的
clear()
重置。我已经更新了上面的代码^。不过,要么我做错了什么,要么这些建议根本解决不了我的问题。现在我在舞台上没有任何行:)@Loki
lines
是事件处理程序的本地变量-您正在对
Shape
的一个新实例调用
clear()
,因此您唯一要清除的是行样式。您需要将
设置为类字段(或将其保留在某个位置),仅实例化一次(不是每次事件触发时),并在任何其他绘图命令之前调用
clear()
。好的,那么,假设我将把
线型
定义与全局变量放在一起,在
重画事件之外
。那么我如何在这个函数中访问
lines
?您只需执行
lines.gra即可