Efectivamente hay muchas formas de dibujar un circulo, y dependiendo de tu necesidad se podra hacer de una forma u otra.
Con las API de dibujo, no es que sea mas sencillo o mas complicado, simplemente puedes obtener un resultado mas detallado o no.
Las APIS solo te permiten dibujar dos tipos de objetos, lineas y linea curva (no circunferencias) y mover "el pincel" sin pintar.
Para dibujar una circunfenrecia debes pintar puntos equistantes de uno:
Se plantean dos cuestiones A)¿como dibujar un punto y B)como dibujar los puntos equidistantes.
A) Podemos hacerlo de dos formas con lineTo y con curveTo pero si es una curva es mejor usar curveTo.
Se consigue de la siguiente manera.
desplazamos el pincel a una posicion (x,y) con moveTo(ejex,ejey) y luego le mandamos pintar hasta otra coordenada o sea la misma lineTo (ejex,ejey) o mejor aun para el caso de curvas curveTo (ejex,ejey,ejex,ejey).
B) Ahora que sabemos como pintar un punto, necesitaremos "un compas" para realizar la circunferencia.
Nuestro compas en action script es un bucle.
radio = 10;
centro = {x:50, y:50};
lineStyle(5, 0xFFFF00, 100); //con lineStyle damos tamaño ,color y alfa a la linea dibujada
beginFill([0xFFFF00[, 100]]) //Si una linea corta a otra o se toca se rellena el area con este color, alfa (tu circulo)
//ahora viene lo dificil de entender si no recuerdas geometria basica , teorema de pitagoras.
for (grados=0; grados<=360; grados += 1) {
x = radio*Math.cos(Math.PI/180*grados);//distancia que hay desde el centro al eje x para grados
y = radio*Math.sin(Math.PI/180*grados);//distancia que hay desde el centro al eje y para grados
if (grados == 0) {
moveTo(cento.x+x, centro.y+y);//hay que mover "el pincel" a la posicion inicial de pintado sin pintar.
}
curveTo(centro.x+x, centro.y+y, centro.x+x, centro.y+y); //dibuja un punto
}
//ese comentario seria para el for pero arriba no se entenderia. El bucle hace que se pinte un punto con una diferencia de un grado, podrias poner 2 y no se apreciaria el cambio incluso podrias poner 20 pero lo que conseguirias seria hacer lineas rectas entre grados, dicho con otras palabras un poligono de N lados (360/20 = 1
una circunferencia es un poligono de infinitos lados (pero no es necesario llegar al infinito
, solo al limite suficiente );
Esto es asi porque pintamos desde el grado anterior hasta el nuevo x,y . Como curveTo() con los parametros que le pasamos dibuja una recta.
Un saludo