2013-04-27 51 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 
    } 
}