2016-10-18 74 views
1

我正在根据我如何在数组中指定数字来创建形状。创建形状但输出值错误

例如:

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

您在哪里定义绘制x的位置? –

+0

我认为x在图形函数中被赋值时已经定义了:draw.graphics.drawEllipse(j * 25,i * 25,25,25); 其中x = j * 25; – Zulu

回答

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); 
     } 
    } 
} 
+0

我试图存储形状的x值和y值,以便随后可以使用它们比较MouseEvent坐标值,只要将鼠标移动到某个形状即可。我没有创建一个数组来存储这些形状,因为它们都在同一个形状对象中,正如你所提到的那样,因为通过使用以下命令清除整个屏幕会更容易: this.graphics.clear(); 虽然我尝试过使用removeChild和splice,但我发现它非常混乱,无法理解splice背后的逻辑。 – Zulu