2016-10-18 7 views
1

配列に数値を割り当てる方法に応じてシェイプを作成しています。例えばシェイプを作成していて出力値が間違っています

:それだけで値0を表示するよう

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

それは私が望んでいたどのように完全に楕円を作成したが、しかし、問題は、トレース機能です。何故ですか?シェイプ変数 'draw'内のx座標をトレースするべきではありませんか?

マップ配列に1が入っていると仮定すると、xとyについて数式がどのように計算されるのでしょうか?それをトレースしたり、どこかに座標を割り当てようとするとxとyの両方の値が0として返されますelse。 xとyは追跡可能ではありませんか? draw.xとdraw.yの値を別の場所に保存できませんか?

+0

ここで、描画のためにxを定義していますか? –

+0

私はxがグラフィックス関数の値を割り当てられているときにすでに定義されていると思った。draw.graphics.drawEllipse(j * 25、i * 25、25、25); ここで、x = j * 25; – Zulu

答えて

3

描画オブジェクトの値がxまたはyに設定されていないため、ゼロをトレースします(デフォルトは0です)。

グラフィックスオブジェクトがあなたの形状のサブ/子オブジェクトであるという点で、混乱があります。したがって、drawはあなたの形状/表示オブジェクトです。実際の楕円はdraw.graphicsです。 GraphicsオブジェクトはDisplayObjectから継承されないため、x/y/width/heightなどのDisplayObjectプロパティはありません。何かを描画するための指示にすぎず、塗りの開始/終了の回数に関係なく1つのエンティティとしてラスタされます。

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座標の値を比較することができます。あなたが言及したように、それらはすべて後でスクリーン全体をクリアするのが簡単になるので、シェイプを格納する配列を作成しませんでした。 私はremoveChildとスプライスを使用しようとしましたが、非常に混乱しスプライスの背後にあるロジックを理解できませんでした。 – Zulu

関連する問題