【问题标题】:How do i redraw a shape in ActionScript 3.0?如何在 ActionScript 3.0 中重绘形状?
【发布时间】:2012-01-08 19:58:38
【问题描述】:

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

对任务本身的简短评论。我有一个 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);
}

但是,无论何时修改形状,它仍会在屏幕上留下其自身的“旧版本”,我不希望这样。我尝试创建和删除实例,变种类型转换,但仍然没有解决问题。

提前致谢

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

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

    【讨论】:

    • 我已经更新了上面的代码 ^ 并回复了 evilguy。不过,要么我做错了什么,要么这些建议并不能解决我的问题。现在我在舞台上没有台词了:)
    • @Loki lines 是事件处理程序的本地变量 - 您在 Shape 的新实例上调用 clear(),因此您唯一要清除的是线条样式.您需要将lines 设为类字段(或将其保留在某处),仅实例化一次(不是每次触发事件时)并在任何其他绘图命令之前调用clear()
    • 好吧,假设我会将lineslineStyle 定义与全局变量一起放在redrawEvents 之外。那么如何在这个函数中访问lines呢?
    • 您只需执行lines.graphics.clear()lines.graphics.lineStyle(whatever),然后在事件处理程序中执行绘图命令。初始化后不需要调用lineStyle,因为无论如何它都会在事件处理程序中被clear() 重置。
    【解决方案2】:

    您是否每次重绘时都创建新的 Shape 实例? 你试过 removeChild(lines) 吗?

    【讨论】:

    • 我有,但这会删除形状的实例,我总是需要在舞台上保留 1 个实例,以显示对象之间的连接
    • @Loki:您需要先删除旧实例,然后再添加新实例。
    • 嗯,显然我要在修改形状之前删除孩子,修改后创建一个新的孩子。尽管如此,当我尝试这样做时 - 我遇到了一个错误,说我无法删除一个不存在的孩子。
    • @Loki :如果你将这个变量设为本地会怎样。在设置 CLICK 侦听器之前放置var lines:Shape;,然后在重绘函数中你会做:if(contains(lines)) { removeChild(lines); lines = new Shape(); }
    • 我已经检查了这个东西,并记下了contains方法,非常感谢,这将在我以后的开发中派上用场
    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多