Apache flex 在Flex画布上绘制正方形

Apache flex 在Flex画布上绘制正方形,apache-flex,canvas,drawrect,Apache Flex,Canvas,Drawrect,我正在尝试为Flex画布上的正方形动画图像编写一些代码。下面的代码有点问题,因为它会逐渐变慢。我想我应该清理一下旧广场什么的 下面我做错了什么 <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init();"> <mx:Script> <![CDATA[ public var

我正在尝试为Flex画布上的正方形动画图像编写一些代码。下面的代码有点问题,因为它会逐渐变慢。我想我应该清理一下旧广场什么的

下面我做错了什么

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init();">
<mx:Script>
<![CDATA[
public var ticker:Timer;

    public function init():void {

        ticker = new Timer(10);

        // This implements the timerEvent
        ticker.addEventListener(TimerEvent.TIMER, update);
        ticker.start();

        draw();
    }

    public function update(evt:TimerEvent):void {
        draw();
    }

    public function draw():void {
        var squareSize:uint = 10;
        var square:Shape = new Shape();

        square.graphics.beginFill(0xFFFFFF, 1.0);
        square.graphics.drawRect(0, 0, myCanvas.width, myCanvas.height);

        var i:int;
        for (i = 0; i < myCanvas.height / squareSize; i++) {
            var j:int;
            for (j = 0; j < myCanvas.width / squareSize; j++) {
                if (Math.random() < 0.5) {
                    square.graphics.beginFill(0x000000, 1.0);
                    square.graphics.drawRect(j * squareSize, i * squareSize, squareSize, squareSize);
                }
            }
        }

        square.graphics.endFill();
        myCanvas.rawChildren.addChild(square);
    }
]]>
</mx:Script>

    <mx:Panel title="Random Squares" height="95%" width="95%" 
        paddingTop="5" paddingLeft="5" paddingRight="5" paddingBottom="5">

        <mx:Canvas id="myCanvas" borderStyle="solid" height="100%" width="100%">
        </mx:Canvas>

    </mx:Panel>
</mx:Application>

您正在向显示列表中添加不确定数量的子项,因此您肯定会遇到性能问题

可以在添加新形状之前删除旧形状

myCanvas.rawChildren.removeChildAt(0);
myCanvas.rawChildren.addChild(square);
您也可以完全取消正方形——不过,请注意在绘图之前调用
Graphics.clear()
。否则,图形对象将像现在的显示列表一样充满数据

public function draw():void {
    var squareSize:uint = 10;

    myCanvas.graphics.clear();
    myCanvas.graphics.beginFill(0xFFFFFF, 1.0);
    myCanvas.graphics.drawRect(0, 0, myCanvas.width, myCanvas.height);
    ...
        myCanvas.graphics.beginFill(0x000000, 1.0);
        myCanvas.graphics.drawRect(...)
    ...
    myCanvas.graphics.endFill();
}

谢谢成功了。您的第二个解决方案中只有一个小错误。此行:square.graphics.drawRect(0,0,myCanvas.width,myCanvas.height);应该是:myCanvas.graphics.drawRect(0,0,myCanvas.width,myCanvas.height);