Flash 请帮助我在as3中创建图表

Flash 请帮助我在as3中创建图表,flash,actionscript-3,actionscript,flash-cs5,Flash,Actionscript 3,Actionscript,Flash Cs5,我在这里创建了一个网格,但是当大量的列出现时,flash会意外地退出 package { import flash.events.MouseEvent; import fl.transitions.Tween; import fl.transitions.easing.Strong; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.

我在这里创建了一个网格,但是当大量的列出现时,flash会意外地退出

package 
{
    import flash.events.MouseEvent;
    import fl.transitions.Tween;
    import fl.transitions.easing.Strong;

    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import fl.motion.Color;
    import flash.text.TextField;



    public class Line extends MovieClip
    {



        public function Line()
        {


            addEventListener(Event.ENTER_FRAME,createGraphContainer);


            // constructor code
        }
        public function createGraphContainer(ev:Event):void
        {
            var grid:MovieClip = new MovieClip();
            var numColumns:Number = 50;
            var numRows:Number = 25;
            var cellHeight:Number = 5;
            var cellWidth:Number = 10;

            grid.graphics.clear();
            grid.graphics.lineStyle(.5, 0xFFECDB);

            // we drop in the " + 1 " so that it will cap the right and bottom sides.;
            for (var col:Number = 0; col < numColumns + 1; col++)
            {
                for (var row:Number = 0; row < numRows + 1; row++)
                {
                    addChild(grid);
                    grid.x = 50;
                    grid.y = 50;
                    //trace(col, row);
                    grid.graphics.moveTo(0, row * cellHeight);
                    grid.graphics.lineTo(cellWidth * numColumns, row * cellHeight);
                    grid.graphics.moveTo(col * cellWidth, 0);
                    grid.graphics.lineTo(col * cellWidth, cellHeight * numRows);


                }


            }

        }
    }

}
包
{
导入flash.events.MouseEvent;
导入fl.transitions.Tween;
导入fl.transitions.easing.Strong;
导入flash.display.MovieClip;
导入flash.display.Sprite;
导入flash.events.Event;
导入fl.motion.Color;
导入flash.text.TextField;
公共类行扩展了MovieClip
{
公共职能行()
{
addEventListener(事件输入帧,createGraphContainer);
//构造代码
}
公共函数createGraphContainer(ev:Event):无效
{
var grid:MovieClip=新的MovieClip();
变量numColumns:Number=50;
变量numRows:Number=25;
变量单元格高度:数字=5;
变量cellWidth:Number=10;
graphics.clear();
grid.graphics.lineStyle(.5,0xFFECDB);
//我们把“+1”放进去,这样它就能盖住右边和底边。;
for(变量列:Number=0;列

这里var numColumns:Number=150;var numRows:数字=225;flash意外退出。给我一个解决方案。伙计们。

您正在添加row*col子对象(在嵌套循环中:addchild(grid)),因此您最终得到了一堆row*col movieclips,其中包含越来越复杂的向量图形。 不太好,尤其是在enterframe上这样做

实际上,它是一个网格,应该绘制一次,图形本身将绘制在另一层上。如果必须重新绘制网格,可以将displayobject传递给函数

另外,您不需要嵌套循环:改用drawRect可以拆分嵌套循环,并且当rect同时绘制顶部和底部时,您可以将循环事件增量为2

下面是一个应该运行得稍微快一点的示例:)

包
{
导入flash.display.MovieClip;
导入flash.display.Shape;
导入flash.events.Event;
导入flash.utils.getTimer;
公共类行扩展了MovieClip
{
私有var网格:形状;
公共职能行()
{
//添加画布一次
网格=新形状();
网格x=50;
网格y=50;
addChild(网格);
//抽一次
createGraphContainer(网格,100,25,5,2);
//画圈
//addEventListener(Event.ENTER_FRAME,重画网格);
}
私有函数重绘网格(e:事件):无效
{
var t:uint=getTimer();
var cols:int=1+int(Math.random()*200);
变量行:int=1+int(Math.random()*200);
变量宽度:int=1+Math.random()*10;
变量高度:int=1+Math.random()*10;
createGraphContainer(网格、列、行、宽度、高度);
跟踪('redrawing take:',(getTimer()-t),'for col:',cols,'rows:',rows,'cell width:',width,'cell height:',height);
}
公共函数createGraphContainer(网格:形状,numColumns:int=100,numRows:int=100,cellWidth:Number=10,cellHeight:Number=5):无效
{
graphics.clear();
网格。图形。线条样式(0.5,0xFFECDB);
//grid.graphics.beginll(0xFF0000.25);//取消注释以进行调试
var gridWidth:Number=numColumns*cellWidth;
var gridHeight:Number=numRows*cellHeight;
grid.graphics.drawRect(0,0,gridWidth,gridHeight);
for(变量列:数字=0;列
您正在添加row*col子对象(在嵌套循环中:addchild(grid)),因此最终会得到一堆row*col movieclips,其中包含越来越复杂的矢量图形。 不太好,尤其是在enterframe上这样做

实际上,它是一个网格,应该绘制一次,图形本身将绘制在另一层上。如果必须重新绘制网格,可以将displayobject传递给函数

另外,您不需要嵌套循环:改用drawRect可以拆分嵌套循环,并且当rect同时绘制顶部和底部时,您可以将循环事件增量为2

下面是一个应该运行得稍微快一点的示例:)

包
{
导入flash.display.MovieClip;
导入flash.display.Shape;
导入flash.events.Event;
导入flash.utils.getTimer;
公共类行扩展了MovieClip
{
私有var网格:形状;
公共职能行()
{
//添加画布一次
网格=新形状();
网格x=50;
网格y=50;
addChild(网格);
//抽一次
createGraphContainer(网格,100,25,5,2);
//画圈
//addEventListener(Event.ENTER_FRAME,重画网格);
}
私有函数重绘网格(e:事件):无效
{
var t:uint=getTimer();
var cols:int=1+int(Math.random()*200);
变量行:int=1+int(Math.random()*200);
变量宽度:int=1+Math.random()*10;
变量高度:int=1+Math.random()*10;
C
package 
{
import flash.display.MovieClip;
import flash.display.Shape;
import flash.events.Event;
import flash.utils.getTimer;

public class Line extends MovieClip
{
    private var grid:Shape;
    public function Line()
    {
        //adds the canvas once
        grid = new Shape();
        grid.x = 50;
        grid.y = 50;
        addChild( grid );

        //draws once
        createGraphContainer( grid, 100, 25, 5, 2 );

        //draws in a loop
        //addEventListener(Event.ENTER_FRAME, redrawGrid );

    }

    private function redrawGrid(e:Event):void 
    {
        var t:uint = getTimer();
        var cols:int = 1 + int( Math.random() * 200 );
        var rows:int = 1 + int( Math.random() * 200 );
        var width:int = 1 + Math.random() * 10;
        var height:int = 1 + Math.random() * 10;
        createGraphContainer( grid, cols, rows, width, height );
        trace( 'redrawing took :', ( getTimer() - t ), 'for col:', cols, 'rows:', rows, 'cell width:', width, 'cell height:', height );
    }

    public function createGraphContainer( grid:Shape, numColumns:int = 100, numRows:int = 100, cellWidth:Number = 10, cellHeight:Number = 5 ):void
    {

        grid.graphics.clear();
        grid.graphics.lineStyle( 0.5, 0xFFECDB);
        //grid.graphics.beginFill( 0xFF0000, .25 ); // uncomment for debug

        var gridWidth:Number = numColumns * cellWidth;
        var gridHeight:Number = numRows * cellHeight;

        grid.graphics.drawRect( 0, 0, gridWidth, gridHeight );

        for (var col:Number = 0; col < numColumns; col += 2 )
        {
            grid.graphics.drawRect( col * cellWidth, 0, cellWidth, gridHeight );
        }           
        for (var row:Number = 0; row < numRows; row += 2 )
        {
            grid.graphics.drawRect(  0, row * cellHeight, gridWidth, cellHeight );
        }

        grid.cacheAsBitmap = true;//not to be used in a loop very efficient if drawn once.
    }
}
}