我正在根据如何在数组中指定数字来创建形状。
例如:
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的值吗?
答案 0 :(得分:3)
它跟踪零,因为您从未设置绘图对象的x
或y
值(默认为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);
}
}
}