创建形状但输出值错误
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 的值存储在其他地方吗?
它跟踪为零,因为您从未设置绘图对象的 x
或 y
值(默认为 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);
}
}
}
我正在根据我在数组中分配数字的方式创建形状。
例如:
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 的值存储在其他地方吗?
它跟踪为零,因为您从未设置绘图对象的 x
或 y
值(默认为 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);
}
}
}