开发者

Drawing squares on Flex Canvas

开发者 https://www.devze.com 2022-12-14 22:48 出处:网络
I\'m trying to write some code to an animated images of squares on a Flex Canvas.There\'s something wrong with my code below because it becomes progressively slower.I assume I\'m supposed to clear the

I'm trying to write some code to an animated images of squares on a Flex Canvas. There's something wrong with my code below because it becomes progressively slower. I assume I'm supposed to clear the old squares or something.

What am I doing wrong below?:

<?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&g开发者_如何学Ct;

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


You're adding an indefinite number of children to your display list, so you're definitely in performance trouble.

You can remove the old shapes before adding the new one

myCanvas.rawChildren.removeChildAt(0);
myCanvas.rawChildren.addChild(square);

You could also do away with the square entirely--note the Graphics.clear() call before drawing, though. Otherwise, the graphics object will fill up with data just like the display list is now.

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();
}
0

精彩评论

暂无评论...
验证码 换一张
取 消