创建形状但输出值错误

时间:2016-10-18 17:27:39

标签: arrays actionscript-3 flashdevelop

我正在根据如何在数组中指定数字来创建形状。

例如:

var draw:Shape = new Shape();
var map:Array = [
[0,1,1,0,0],
[0,0,1,1,0]
]

for (var i:int = 0; i < map.length - 1; i++)
{
    for (var j:int = 0; j < map[0].length - 1; j++)
    {
        if (map[i][j] == 1)
        {
            draw.graphics.beginFill(1,1);
            draw.graphics.drawEllipse(j * 25, i * 25, 25, 25);
            draw.graphics.endFill();

            trace(draw.x);
        }
    }
}

它完美地创建了我想要的椭圆,然而,问题在于跟踪功能,因为它只显示值0。这是为什么?它不应该跟踪形状变量'draw'中的x坐标吗?

当地图数组中有一个1时的假设值应该是x和y的数学运算方式,但是当我尝试跟踪它或将坐标分配给其他地方时,它会为x和y返回值0 。 x和y是不可追踪的吗?我可以不在其他地方存储draw.x和draw.y的值吗?

1 个答案:

答案 0 :(得分:3)

它跟踪零,因为您从未设置绘图对象的xy值(默认为0)。

混淆在于图形对象是形状的子/子对象。因此draw是您的形状/显示对象,draw.graphics是您的实际椭圆。图形对象不从DisplayObject继承,因此它们没有像x / y / width / height这样的DisplayObject属性 - 它们只是用于绘制内容的指令,并且无论您开始/结束填充或绘制多少次都将其作为一个实体进行栅格化。

虽然你可以通过graphics.readGraphcisData访问原始图形数据,你可以解析出一个单独的形状,但如果将它们全部绘制成单个椭圆,则没有简单的方法可以获得单个椭圆的x / y相同的图形对象。

如果您在问题中解释了您实际想要实现的目标,那么可以给出推荐的解决方案。

最有可能的是,您需要将省略号分解为自己的形状对象(如果您需要将它们作为可以在以后更改的单个实体):

var draw:Sprite = new Sprite();
var map:Array = [
[0,1,1,0,0],
[0,0,1,1,0]
]

for (var i:int = 0; i < map.length - 1; i++)
{
    for (var j:int = 0; j < map[0].length - 1; j++)
    {
        if (map[i][j] == 1)
        {
            var ellipse:Shape = new Shape();
            ellipse.graphics.beginFill(1,1);
            ellipse.graphics.drawEllipse(0, 0, 25, 25);
            ellipse.graphics.endFill();

            ellipse.x = i * 25; ellipse.y = i * 25;

            draw.addChild(ellipse);
            trace(ellipse.x);
        }
    }
}

如果您只想要先前绘制的椭圆,只需在绘制时存储该信息:

var ellipse:Rectangle = new Rectangle(0,0,25,25);

for (var i:int = 0; i < map.length - 1; i++)
{
    for (var j:int = 0; j < map[0].length - 1; j++)
    {
        if (map[i][j] == 1)
        {
            ellipse.x = i * 25;
            ellipse.y = i * 25;

            draw.graphics.beginFill(1,1);
            draw.graphics.drawEllipse(ellipse.x, ellipse.y, ellipse.width, ellipse.height);
            draw.graphics.endFill();

            trace(ellipse.x);
        }
    }
}