Red de conocimiento informático - Material del sitio web - ¿Cómo dibujar un círculo en flash?

¿Cómo dibujar un círculo en flash?

Es fácil dibujar un círculo o una elipse en FLASH o PHOTOSHOP. ¿Cómo crear una obra que permita a los usuarios arrastrar directamente el mouse para dibujar un círculo o una elipse? La siguiente es una explicación de cómo usar AS para lograr este efecto:

1 Definición básica: aunque todos lo saben, lo explique o no, todavía quiero explicarlo para evitar que algunas personas. olvidando~~

Círculo: El lugar geométrico de un punto en un plano cuya distancia desde un punto fijo es igual a una longitud fija.

Elipse: Trayectoria de un punto en el plano cuya distancia a dos puntos fijos es igual a una longitud fija (la longitud fija es mayor que la distancia entre los dos puntos fijos).

2. Descripción del problema: Dibujar círculos y elipses usando AS.

3. Análisis del problema:

1. Círculo

Jaja, la mayoría de la gente definitivamente pensará: Humph ~ Esto no es simple, ¿no? ¿Es solo un punto de seguimiento? Solo conoce la ecuación. Bueno, usar ecuaciones para dibujar puntos es ciertamente un buen método. Hice lo mismo al principio. Pero - (Primera declaración: si usas curveTo, es un asunto diferente)

Podemos mejorar el método de dibujar círculos:

En primer lugar, para escribir mejor Código conciso, no debemos usar ecuaciones ordinarias, sino ecuaciones paramétricas:

x = r×cos(a) y = r×sin(a) donde a es un parámetro.

Entonces, un punto muy importante, en cuanto a la complejidad del tiempo, hay que considerar este punto: si elegimos el incremento de 0,01 para el parámetro a al dibujar puntos, necesitaremos realizar 2PI/0,01 puntos. dibujo, que es bastante grande. Si esto sucede cada vez, obviamente no es muy bueno (tal vez algunas personas puedan aceptarlo, pero a menudo estoy acostumbrado a no poder tolerar tal complejidad de tiempo). Entonces podemos pensar: ¿Cuál es la diferencia entre un círculo y un círculo? Por cierto, es sólo el radio y la posición central del círculo. Entonces será fácil de manejar. Primero podemos usar puntos de rastreo para dibujar un círculo y guardarlo en un MC (por supuesto, también podemos dibujar un MC directamente con el mouse), y luego copiarlo y ajustarlo y está bien. Éste es un pensamiento importante.

2. Elipse:

La ecuación estándar de un círculo es x^2 y^2 = r^2, mientras que la elipse es x^2/a^2 y^2. /b^ 2=1. Para un punto del círculo (expresado mediante una ecuación paramétrica):

(r×cos(a), r×sin(a)) donde a es un parámetro.

Si comprimimos (o expandimos) la dirección x según el coeficiente kx y comprimimos (o expandimos) la dirección y según el coeficiente ky, entonces es (kx×r×cos(a), ky×r×sin (a)).

De esta manera, este punto debe estar en x^2/(kx×r)^2 y^2/(ky×r)^2 = 1, ¡entonces la trayectoria de dicho punto es una elipse! ! !

¡Esto demuestra que la forma obtenida al comprimir el círculo es una elipse! !

De esta manera, podemos configurar _xscale y _yscale del círculo copiado mc para convertirlo en la elipse requerida. ¡Qué lindo! ~

Es mucho más rápido dibujar círculos y elipses de esta manera

4. Análisis de código

función círculoforbase() {//MC utilizada para dibujar de forma básica. círculos, todos los círculos o elipses posteriores se copiarán de este círculo

_root.createEmptyMovieClip("circle", 0); //Crea un mc vacío

circulo.lineStyle(1, 0x000000, 100); //Establece las propiedades de la línea

var th = 0; //Este es el parámetro utilizado para dibujar un círculo usando la ecuación paramétrica del círculo ~ se acumula en pasos cada uno. time

var step = 0.01; //El tamaño del paso del parámetro, es decir, dibuja un punto cada 0,01 radianes

con (círculo) {

moveTo(100, 0); //Mover Ir al punto más a la derecha del círculo a dibujar

hacer {

th = step; //El valor del parámetro aumenta

lineTo(Math.cos(th) *100, Math.sin(th)*100); //Dibuja puntos según las ecuaciones de parámetros

} while (thlt;=Math.PI*2 ); //Se detiene cuando el parámetro es igual a 2PI, que es exactamente una Circunferencia

_visible = 0 //Establece el círculo dibujado en "invisible"

}

}

circleforbase( ); //Dibuja un círculo básico mc. Tenga en cuenta que el nombre de este círculo básico mc es círculo

n = 0; número de círculos

f = 0; // Indica el estado del mouse, 1 significa que está presionado, 0 es lo opuesto

stx = 0

sty = 0;

enx = 0;

eny = 0;

//La elipse se incluirá en un rectángulo. cuatro variables representan los dos vértices en la diagonal del rectángulo, de modo que se puede determinar la función drawoval de este rectángulo (sx, sy, ex, ey, n){

//El método para dibujar un círculo/elipse De hecho, los primeros cuatro parámetros determinan un rectángulo, pero tenga en cuenta que es solo un rectángulo lógico.

// No lo dibujamos, solo dibujamos la elipse dentro de su rango. Los siguientes comentarios explicarán cómo se ve este rectángulo

_root.circle.duplicateMovieClip("cir " n, n); // Copia un círculo estándar (el mc básico con un radio de 100)

with(_root["cir" n]){

_xscale = Math .abs(ex-sx)/2 //Establece la longitud del semieje de la elipse paralela; al eje x

_yscale = Math.abs(ey-sy)/2 //Establece la longitud de la elipse paralela al eje x Longitud semiaxial del eje y

_x = 0.5*(sx ex); //La x de su centro

La coordenada es la coordenada x del punto medio de la diagonal del rectángulo

_y = 0.5*(sy ey); //La coordenada y de su centro es la coordenada y del punto medio de la diagonal. línea del rectángulo

}

}

_root.onMouseDown = function(){

f =

;

stx = _root._xmouse;

sty = _root._ymouse;

n ; // Cada vez que se presiona el mouse, el valor f se asigna a 1 y un vértice. del rectángulo es la coordenada cuando se presiona el mouse. Preparar Dibuja la enésima elipse.

}

_root.onMouseUp = function(){

f=0; //Cuando se suelta el mouse, f se asigna a 0, de modo que cuando el mouse se mueve No continuará dibujando elipses

}

_root.onMouseMove = function(){

if (f){//Cuando el mouse se mueve, si se presiona el mouse Ejecute el código siguiente (es decir, vuelva a dibujar la enésima elipse)

enx = _root._xmouse;

eny = _root._ymouse // Determina el rectángulo que lo circunscribe; esta elipse (los lados son un rectángulo paralelo en el eje de coordenadas)

drawoval(stx, sty, enx, eny, n); //Vuelve a dibujar la enésima elipse en el rectángulo determinado por los parámetros

}

}