0

我以这种方式编写了我的代码,但没有以正确的方式出现。我不知道我错过了什么,我无法弄清楚。如果有人想帮忙!!

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

2 回答 2

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
    }
}
于 2013-04-29T10:48:01.813 回答
0

你可以看看这篇博文

或在这里的课程代码:http: //pastie.org/929979#265

寻找drawStar那里的功能

(我没有复制出处,因为我没有向作者索要)

于 2013-04-27T23:14:13.393 回答