2011-12-28 8 views
1

サークルの描画に問題があります。このコードは、1つを除いて必要なすべてのセグメントを描画するように機能しているようですが、図面のポイントを正確にトレースしているように見えます。なぜこのサークルはすべてのポイントを正しく描画しないのですか?

これはセグメントを生成するクラスである:

package views 
{ 
    import flash.display.Sprite; 
    import flash.geom.Point; 

    import views.segments.AS_Segment; 

    public class AS_ColorContainer extends Sprite 
    {  
     private var currX  :int; 
     private var currY  :int; 
     private var diameter :int; 
     private var angle  :int; 

     private var segments:Vector.<AS_Segment>; 

     public function AS_ColorContainer() 
     { 
      init(); 
     } 

     private function init():void 
     { 
      diameter = 400; 
      angle = 0; 
      currX = 0; 
      currY = 0 - radius; 
      segments = new Vector.<AS_Segment>(24); 

      for(var i:int = 0; i < 6; i++) { 
       drawSegment("greenLarge",0x00FF00,30); 
       drawSegment("red",0xFF0000,10); 
       drawSegment("greenSmall",0x00FF00,10); 
       drawSegment("blue",0x0000FF,10); 
      } 
     } 

     private function drawSegment($name:String,$color:uint,$size:int):void 
     { 
      var seg:AS_Segment = new AS_Segment($name); 
      seg.graphics.beginFill($color); 
      seg.graphics.moveTo(0,0); 
      seg.graphics.lineTo(currX,currY); 
      trace("Old: "+currX+":"+currY); 
      angle += $size; 
      currX = radius * Math.cos(degToRad(angle)); 
      currY = radius * Math.sin(degToRad(angle)); 
      trace("New: "+currX+":"+currY); 
      seg.graphics.lineTo(currX,currY); 
      seg.graphics.lineTo(0,0); 
      seg.graphics.endFill(); 
      addChild(seg); 
      segments.push(seg); 
     } 

     private function degToRad($deg:Number):Number 
     { 
      return $deg * (Math.PI/180); 
     } 

     private function get radius():Number 
     { 
      return diameter/2; 
     } 
    } 
} 

AS_Segmentクラスは単にIDを記憶する形状の単純な拡張である:

package views.segments 
{ 
    import flash.display.Shape; 

    public class AS_Segment extends Shape 
    { 
     public var id  :String; 

     public function AS_Segment($id:String) 
     { 
      id = $id; 
     } 
    } 
} 

期待どおり出力がありません:

enter image description here

しかし、トレースは正しく表示されます。

Old: 0:-200 
New: 173:99 
Old: 173:99 
New: 153:128 
Old: 153:128 
New: 128:153 
Old: 128:153 
New: 100:173 
Old: 100:173 
New: 0:200 
Old: 0:200 
New: -34:196 
Old: -34:196 
New: -68:187 
Old: -68:187 
New: -99:173 
Old: -99:173 
New: -173:99 
Old: -173:99 
New: -187:68 
Old: -187:68 
New: -196:34 
Old: -196:34 
New: -200:0 
Old: -200:0 
New: -173:-100 
Old: -173:-100 
New: -153:-128 
Old: -153:-128 
New: -128:-153 
Old: -128:-153 
New: -100:-173 
Old: -100:-173 
New: 0:-200 
Old: 0:-200 
New: 34:-196 
Old: 34:-196 
New: 68:-187 
Old: 68:-187 
New: 100:-173 
Old: 100:-173 
New: 173:-100 
Old: 173:-100 
New: 187:-68 
Old: 187:-68 
New: 196:-34 
Old: 196:-34 
New: 200:0 

答えて

4

あなたは正しい方法でカレーを初期化していません。
(またCURRX)

currX = 0; 
    currY = 0 - radius; 

これらの線は、それが(200,0)でなければならない場合(0,-200)に描画するために第1のポイントを設定。 x値が間違っていると予想されるため、結果はちょっと変です。黒の境界線は、それが他のセグメントによって隠されていなかった場合は、最初の円セグメントは、実際に、どのように見えるかを示しています。

circle segments

+0

グレートスポット、ありがとうございました! – shanethehat

関連する問題