1

我需要在 BorderContainer 中提供 Snap To Grid 功能。所有功能都已完成,但我遇到了一个问题,那就是绘制网格。

  1. 尝试使用 Creation_Complete 事件,工作正常,但只要添加一个孩子,网格就会消失。

  2. 覆盖 updateDisplayList - 这是迄今为止最好的选择(一切正常),但问题是每当我移动(或者更确切地说是移动时)内部的控件(我使用 ObjectHandles 库)时,都会调用 updateDisplayList 方法来重绘网格 - >使移动过程非常缓慢。

这就是我填充网格的方式。

numRows = Math.ceil(this.unscaledHeight/gridSize);
numCols = Math.ceil(this.unscaledWidth/gridSize);

this.graphics.beginFill(0x000000, 1.0);

for (var i:int= 0; i < numRows; i++)
{               
    for (var j:int = 0; j < numCols; j++)
    {       

        this.graphics.drawCircle(j * gridSize, i * gridSize, 1);
    }
}

this.graphics.endFill();

我只想绘制一次,仅在调整容器大小时绘制。有什么活动可以帮助我实现这一目标吗?或者有什么有效的方法可以帮助我画一个网格?欢迎任何意见和建议。提前感谢很多:)

4

1 回答 1

2

updateDisplayList()是具有unscaledWidthunscaledHeight作为参数的方法。

因此,您可以通过以下方式避免不必要的重绘:

private var previousUnscaledWidth:Number;
private var previousUnscaledHeight:Number;

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
    …
    if (unscaledWidth != previousUnscaledWidth || unscaledHeight != previousUnscaledHeight)
    {
        // Your drawing routine here

        previousUnscaledWidth = unscaledWidth;
        previousUnscaledHeight = unscaledHeight;
    }
}

您可以将此代码放在具有UIComponent基类的自定义 ActionScript 组件中。并将这个网格放置在 BorderContainer 中:

<s:BorderContainer>
    <MyGrig left="0" right="0" top="0" bottom="0" />
    <!-- Another container's content here -->
</s:BorderContainer>
于 2011-04-11T12:52:27.973 回答