创建形状但输出值错误

Creating shapes but wrong output values

我正在根据我在数组中分配数字的方式创建形状。

例如:

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 的数学运算方式,但它 returns 每当我尝试跟踪它时 x 和 y 的值都为 0 或将坐标分配给其他地方。 x 和 y 是不可追踪的吗?我可以不将 draw.x 和 draw.y 的值存储在其他地方吗?

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

混淆之处在于图形对象是您形状的 sub/child 对象。所以 draw 是您的 shape/display 对象,draw.graphics 是您的实际椭圆。图形对象不从 DisplayObject 继承,因此它们没有像 x/y/width/height 这样的 DisplayObject 属性 - 它们只是绘制某些内容的说明,并且无论您 begin/end 填充或绘制多少次,都作为一个实体被栅格化。

虽然您可以通过 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);
        }
    }
}