2013-04-27 49 views
0

我這樣寫我的代碼,但是沒有以正確的方式出現。我不知道我錯過了什麼,我弄不明白。如果有人想要幫助!如何在AS3中繪製一顆星

private var _color:uint; 
private var _radius:int; 

public function Star(c:uint = 0xff0000, r:int = 15) 
{ 
    _color = c; 
    _radius = r; 

    createStar(); 

}  
    private function createStar():void  
    {   
     this.graphics.lineStyle(3,_color); 
     this.graphics.moveTo(_radius,0); 

     for(var i:int = 1; i < 11; i++) 
     { 
     var radius2:Number = _radius; 

     if (i % 2 > 0) 
     } 
     _radius = _radius/2; 
     var angle:Number = (6.28/5) * i; 
     this.graphics.lineTo(Math.cos(angle) * radius2, Math.sin(angle) * radius2); 
    } 
} 

回答

3

你的createStar()函數看起來很糟糕:

  • 未完成的條件(if (i % 2 > 0)),這是一個語法錯誤
  • 硬編碼值:var angle:Number = (6.28/5) * i;,也許沒有那麼糟糕假設6.28被認爲是Math.PI * 2,但i計數器不屬於那裏
  • 畫一條線(this.graphics.lineTo(Math.cos(angle) * radius2, Math.sin(angle) * radius2);),並期待一個明星

你可能想嘗試這樣的事:

private function createStar():void  
{   
    graphics.lineStyle(3,_color); 
    graphics.moveTo(_radius,0); 

    var angleIncrement = Math.PI/5;//5 pointed star -> 10 point arround the circle (360 degrees or Math.PI * 2): 5 outer points, 5 inner points 
    var ninety:Number = Math.PI * .5;//offset the rotation by 90 degrees so the star points up 

    for(var i:int = 0; i <= 10; i++){//for each point 
     var radius:Number = (i % 2 > 0 ? _radius : _radius * .5);//determine if the point is inner (half radius) or outer(full radius) 
     var px:Number = Math.cos(ninety + angleIncrement * i) * radius;//compute x 
     var py:Number = Math.sin(ninety + angleIncrement * i) * radius;//and y using polar to cartesian coordinate conversion 
     if(i == 0) graphics.moveTo(px,py);//move the 'pen' so we don't draw lines from (0,0) 
     graphics.lineTo(px,py);//draw each point of the star 
    } 
}