fbpx
Wikipedia

Biblioteca Ming

Biblioteca Ming es una biblioteca de open source para la creación de ficheros SWF (Adobe Flash), realizada en Lenguaje de programación C. A menudo se utiliza como un módulo PHP, permitiendo la generación de animaciones Flash en el servidor web utilizando la base de datos del mismo. Además de en PHP, la biblioteca se puede utilizar en los lenguajesC++, Perl, Python y Ruby

Ming
Información general
Tipo de programa Biblioteca
Licencia GNU General Public License
Información técnica
Programado en C
Versiones
Última versión estable 0.3.0 15 de febrero, 2006
Enlaces
Repositorio de código

Características

Ming soporta casi todas las características de Flash 4, incluyendo: formas, gradientes, bitmaps (pngs y jpegs), transformaciones ("cambio de forma"), texto, botones, acciones, símbolos gráficos ("clips de película"), soporte audio mp3, y las transformaciones de color. La única característica que está haciendo falta es los eventos de sonido.

Además, Ming no tiene absolutamente nada que ver con MNG, el descendiente animado de PNG. Los dos se usan para animación web, ambos son declarados "ming", pero solo uno se usa para hacer las engorrosas películas flash.

Dibujando

El objeto fundamental en una película flash es una forma. O, en Ming, una SWFShape. En php, instancia un objeto SWFShape con la simple expresión:

<?php New SWFShape(); ?> 

Aunque la biblioteca Ming está escrita en código C plano, está diseñada para ser utilizada en un ambiente orientado a objetos; por consiguiente, en PHP tu puedes acceder a las funciones de dibujo de Ming mediante el objeto SWFShape. Para dibujar un cuadrado rojo de 400 unidades en cada lado con una anchura de línea de 20 unidades haz:

<?php $s = new SWFShape (); $s->setLine(20, 0xff, 0, 0); $s->drawLineTo(400, 0); $s->drawLineTo(400, 400); $s->drawLineTo(0, 400); $s->drawLineTo(0, 0); ?> 

Primero, una nota acerca de las unidades: la especificación flash indica una escala de veinte unidades por píxel, así, el cuadrado generado mediante el código anterior tendría 20 píxeles de lado y una línea de un píxel. Sin embargo, esta escala no es forzada en ninguna parte; la escala depende únicamente del tamaño que tu especifiques cuando insertes la película en tu código html y del tamaño del marco que establezcas dentro de la película (lo puedes cambiar después). Nosotros podríamos haber dibujado el cuadrado también de 20 unidades con una línea de 1 unidad. De cualquier modo, nosotros conseguimos el mismo cuadrado si escalamos la película junto con esta.

Ahora, probablemente notaste que el método "drawLineto" únicamente recibe dos argumentos considerando que una línea normal tiene cuatro parámetros, estos son una coordenada "x" y una coordenada "y" para ambos puntos finales. Y probablemente concluiste que esto significa que el dibujo en Ming es basado en pluma; es decir, el objeto forma guarda una referencia de la ubicación de la pluma imaginaria en la superficie del dibujo, y los comandos de dibujo referencian y afectan implícitamente la ubicación de la pluma. Esto debió ser suficiente para que aprendieras que drawLineTo tiene una función drawLine relacionada que usa posicionamiento relativo en lugar de coordenadas absolutas. En otras palabras, las funciones de dibujo anteriores podrían reemplazarse por:

<?php $s->drawLine(400, 0); $s->drawLine(0, 400); $s->drawLine(-400, 0); $s->drawLine(0, -400); ?> 

y obtendríamos el mismo cuadrado rojo.

El método setLine recibe cuatro (o cinco) los argumentos: el ancho de la línea, y el rojo, verde, y azul (y opcionalmente la transparencia), componentes del color de la línea. Cuando fijas el estilo de línea, este se aplica a todos los comandos de dibujo subsecuentes hasta que cambie de nuevo el estilo de línea con setLine. Para no utilizar estilo de línea (que, a propósito, es el valor por defecto para las formas), simplemente fija el ancho en cero.

Finalmente, estos son dos de los comandos de dibujo más útiles:

<?php $s->movePenTo(x,y); ?> 

Mueve la pluma a las coordenadas (x,y) sin dibujar línea (y movePen es su primo más cercano), mientras que:

<?php $s->drawCurveTo(cx, cy, el hacha, el ay); ?> 

Dibuja una curva cuadrática bezier simple desde la ubicación actual de la pluma hasta el punto (ax,ay) usando el punto (cx,cy) como un punto de control. Como esperamos, drawCurve hace lo mismo, excepto que usa coordenadas relativas a la posición actual de la pluma.

Estilos de relleno

Esto puede llegar a ser una cosa muy confusa acerca de Ming, de manera que haré algunas aclaraciones antes. El formato swf está diseñado para ser compacto y fácil de utilizar, esto significa que las optimizaciones en los atributos de formas son hechas en el acto, no por el reproductor.

Específicamente, cuando estás definiendo una forma debes decirle al reproductor qué porción del espacio entre las líneas debe quedar rellena. La razón para esto (y me siento libre de saltar este párrafo, y no estará en el ejemplo) es que el reproductor flash dibuja la forma mientras verifica las líneas, y como este recorre cada borde en su definición de forma, revisa los registros de relleno del lado izquierdo y del lado derecho para ver que estilo de relleno se está aplicando sobre la línea. Si el borde es más denso al norte que al sur, el explorador de línea se está moviendo al lado derecho del borde mientras cruza sobre la línea desde la derecha hacia la izquierda, así empieza rellenando con el estilo de relleno del borde del lado derecho. Si el borde fuera más denso al sur que al norte, usaría el estilo relleno del lado izquierdo.

Fija el relleno del lado izquierdo y del lado derecho mediante los métodos setRightFill y setLeftFill. Estos simplemente trabajan como setLine, se aplican a todos los bordes subsecuentes hasta que cambie el estilo de relleno de nuevo. setRightFill y setLeftFill reciben un argumento, un objeto SWFFill.

SWFFill

SWFFill abarca rellenos sólidos, gradientes, y mapas de bits. En lugar de instanciar un SWFFill directamente, solicitas un SWFShape para que se cree uno para utilizar el método addFill de SWFShape. La lógica detrás de esto es que el relleno sólo tiene significado dentro del contexto de la forma, y veremos por qué brevemente. addFill viene en una variedad de formatos, uno para cada uno de los tipos de relleno que puede crear: colores sólidos, mapas de bits, y gradientes.

<?php $f = $s->addFill(r, g, b [,a]); ?> 

Crea un relleno de color sólido con los componentes especificados rojo, verde, y azul (y opcionalmente transparencia). Dibujemos un cuadrado rojo relleno:

<?php $s = new SWFShape (); $f = $s->addFill(r, g, b [,a]); $s->setRightFill($f); $s->movePenTo(-200, -200); $s->drawLine(400, 0); $s->drawLine(0, 400); $s->drawLine(-400, 0); $s->drawLine(0, -400); ?> 

Nosotros usamos setRightFill aquí porque dibujamos el contorno del cuadrado en sentido de las manecillas del reloj, así, el interior del cuadrado se rellena desde el borde del lado derecho. Si hubiéramos dibujado el cuadrado un sentido contrario a las agujas del reloj, habríamos usado el método setLeftFill.

SWFBitmap

Para agregar un relleno de mapa de bits a una forma, usamos:

<?php $f = $s->addFill(bitmap [, flags]); ?> 

Donde el mapa de bits es un objeto SWFBitmap, creado con,:

<?php $b = new SWFBitmap(filename [, maskname]); ?> 

Donde filename es el nombre de un jpeg o un archivo dbl. Un archivo "dbl" es un fichero png convertido mediante la utilidad "png2dbl" el cual Ming puede procesar más fácilmente. (Estas conversiones son un "rasgo" de ming que usted encontrará de vez en cuando. La única razón por la que le pedimos que pase por estos pasos extra es para no tener que utilizar varias bibliotecas de apoyo como libpng para usar ming. Algún día autoconf ordenará este lío y será capaz de leer pngs, gifs y ttfs con una simple llamada a una función.) El programa png2dbl es incluido en el paquete fuente de Ming. También sea consciente de que Ming actualmente puede procesar básicamente archivos comprimidos jpeg. No trabaja la lectura básica, optimizada y progresiva de jpegs.

El argumento opcional máscara especifica un archivo "msk" que agrega un canal de transparencia a un mapa de bits jpeg. El archivo msk se crea con "gif2mask", también incluido en el paquete fuente Ming. El archivo gif de entrada debe ser del mismo tamaño del jpeg. El mapa de bits resultante es opaco donde la máscara de imagen es blanca, semi-transparente donde es gris, y totalmente transparente donde es negra. Es decir, el valor de los píxeles del archivo de máscara se usa como el nivel de transparencia para los píxeles de la imagen jpeg.

El argumento flags puede ser SWFFILL_CLIPPED_BITMAP o SWFFILL_TILED_BITMAP, e indica si los mapas de bits deben seguir una secuencia (qué es el valor por defecto, en lugar del argumento flags) o deben superponerse, respectivamente.

SWFBitmap también tiene métodos para obtener las dimensiones de su imagen:

<?php $b->getWidth (); $b->getHeight (); ?> 

Qué le permite dibujar un rectángulo del mismo tamaño de tu mapa de bits, que de hecho es bastante útil.

SWFGradient

Los gradientes, como ya bien sabes, son las transiciones uniformes entre colores. En Flash, los gradientes pueden ser lineales o radiales, pueden contener hasta ocho colores, y pueden tener transparencia. Para construir una relleno de gradiente, primero cree un objeto SWFGradient:

<?php $g = new SWFGradient (); ?> 

Entonces fija los valores iniciales mediante:

<?php $g->addEntry(ratio, r, g, b [,a]); ?> 

Donde ratio es un número entre 0 y 1, y r, g, y b (y opcionalmente a) especifican los componentes rojo, verde, y azul (y transparencia) de la ubicación específica del gradiente. Debes (tienes que hacerlo) agregarlos en orden de incremento de ratio.

Por ejemplo, así es como creas un simple gradiente negro a blanco:

<?php $g = new SWFGradient (); $g->addEntry(0, 0, 0, 0); $g->addEntry(1.0, 0xff, 0xff, 0xff); ?> 

Finalmente, tu agrega el gradiente a su forma con:

<?php $f = $s->addFill(gradient [, flags]); ?> 

Donde gradient es su recién creado SWFGradient y las banderas son SWFFILL_RADIAL_GRADIENT para un (sorpresa!) gradiente radial, o SWFFILL_LINEAR_GRADIENT para el viejo y aburrido gradiente lineal. Si no se proporcionan banderas, el gradiente por defecto es lineal.

Transformando su relleno

Suponiendo que para ti el nuevo gradiente y relleno con mapas de bits no son muy divertidos en su estado por defecto, nosotros amablemente hemos proporcionado los siguientes métodos:

<?php $f->moveTo(x,y); ?> 

Mueve el relleno a las coordenadas (el x,y):

<?php $f->rotateTo(deg); ?> 

Gira el relleno deg grados, y:

<?php $f->scaleTo(xscale [, yscale]); ?> 

Fija la escala de relleno en xscale en dirección x y yscale en dirección y. Si sólo se proporciona un argumento, ambas dimensiones son escaladas por xscale. Por último:

<?php $f->skewXTo(s); $f->skewYTo(s); ?> 

Sesga el relleno por s en el eje x o en el eje y. Una s de 0 no es sesgada, una s de 1.0 es sesgada a un ángulo de 45 grados.

Animación

Ahora que hemos definido una forma, seguro nos gustaría poder verla. Para hacer esto, necesitamos un lienzo en el cual dibujar. Ese lienzo es el venerado SWFMovie.

<?php $m = new SWFMovie (); ?> 

Crea un nuevo objeto SWFMovie, base para la animación. Nosotros podemos usar

<?php $m->setBackground(r, g, b); ?> 

Para fijar el color del fondo:

<?php $m->setRate(rate); ?> 

Para fijar el frame rate (en frames por segundo), y:

<?php $m->setDimension(width, height); ?> 

Para fijar el tamaño de la película. Acuérdate lo que dijimos acerca del escalamiento: el tamaño de la presentación establecido en su html determina el tamaño real. Las dimensiones de la película fijadas aquí determinan la escala en la que sus formas serán dibujadas. Si usted fija el tamaño de su película en 3200x2400 y lo empotra en una página html de 320x240, sus formas serán 1/10 del tamaño que usted especificó en sus comandos de dibujo.

Tu forma no se dibujará en la película hasta que usted cree una instancia de ella llamando:

<?php $i = $m->add($s); ?> 

Este método crea una instancia de la forma en la película y retorna una referencia con la que puede alterar la apariencia de la instancia. Puedes, de hecho, agregar la misma forma a su película tantas veces como quieras (siendo razonable, claro) y usar los apuntadores retornados para referenciar cada uno individualmente.

Usar Ming para hacer películas flash es análogo a usar una cámara de movimiento: debes poner las formas en su lienzo, colóquelos como usted guste, pulse entonces el obturador para grabar el arreglo y avance al siguiente frame. Coloca:

<?php $m->nextFrame (); ?> 

El paso "arreglo" es realizado llamando métodos proporcionados por el apuntador a la instancia (que se generó con el método add de SWFMovie, recuerdas?). Estos métodos son idénticos a los métodos de transformación que vimos en SWFFill, excepto que cada uno tiene una versión relativa que actúa en relación con la posición actual, escala, rotación, e inclinación. Por ejemplo:

<?php $i->moveTo(x,y); ?> 

Mueve el objeto a las coordenadas (el x,y), mientras:

<?php $i->move(x,y); ?> 

Desplaza el objeto con el vector (el x,y). El resto de los métodos son:

<?php $i->rotateTo(deg); $i->rotate(deg); $i->scaleTo(xscale [, yscale]); $i->scale(xscale [, yscale]); $i->skewXTo(s); $i->skewX(s); $i->skewYTo(s); $i->skewY(s); ?> 

Confió en que ya leíste la sección de transformación de rellenos y puedes deducir lo que hacen estos métodos ok?.

Tu también puedes quitar un objeto de la lista de despliegue si estás cansado de su fisonomía:

<?php $m->remove($i); ?> 

Transformar colores

Otra cosa que podemos hacer es alterar el color del objeto:

<?php $i->addColor(r, g, b [,a]); $i->multColor(r, g, b [,a]); ?> 

El primer método agrega un valor constante a cada uno de los canales del objeto de despliegue: rojo, verde, y azul (y opcionalmente transparencia). El segundo multiplica los canales por los valores de escala dados.

Nota que estos valores pueden ser negativos; para invertir el canal azul de un objeto desplegado, tu utilizarías:

<?php $i->addColor(0, 0, 0xff); $i->multColor(1.0, 1.0, -1.0); ?> 

Nota también que estos métodos no son conmutativos, así:

<?php $i->addColor(0xff, 0, 0); $i->addColor(0, 0xff, 0); ?> 

Finalmente cuando tengas todo listo, llama a Ming para enviar la película al navegador

<?php header('Content-type: application/x-shockwave-flash '); $m->output (); ?> 

El comando header hace que tu servidor web le diga al navegador del cliente que esto es, de verdad, una película flash.

Para un ejemplo rápido, hagamos que el cuadrado rojo que creamos previamente (inmóvil en $s para ahorrarle a mis dedos un poco de uso) el giro:

$m = new SWFMovie (); $m->setDimension(800, 600); $i = $m->add($s); $i->moveTo(400, 300); for($j=0; $jnextFrame ();<5; ++$j) { $m->nextFrame(); $i->rotate(15); } $m->nextFrame (); header('Content-type: application/x-shockwave-flash'); $m->output (); 

Nosotros estamos siendo terriblemente diestros aquí al permitir que el ciclo de animación vuelva al principio después de rodar el pobre cuadrado sólo 75 grados ya que el primer frame es idéntico a una rotación de 90 grados. Verdaderamente muy inteligentes nosotros.

El texto

Primero, carga una fuente:

<?php $f = new SWFFont(filename); ?> 

Donde filename es un archivo fdb. (Sí, otro formato de archivo ad hoc - crea archivos fdb desde las plantillas de archivo flash swt con la utilidad makefdb de Ming.) El objeto SWFFont le proporciona alguna información métrica de la fuente:

<?php $f->getAscent (); $f->getDescent (); $f->getLeading (); $f->getWidth(string); ?> 

Cada método produce la métrica solicitada como un número, escalado a una altura de fuente de 1024. A menos que esté desplegando tu texto a una altura de 1024, necesitarás multiplicar el número retornado por alto/1024.

Puedes ver el manejo de texto mediante:

<?php $t = new SWFText (); $t->setFont($f); $t->setHeight(240); $t->setColor(0xff, 0, 0); $t->moveTo(10,250); $t->addString ("no, por favor! no mis dedos de los pies"!); ?> 

Agrega un SWFText a tu película con el método add de SWFMovie animarlo con el apuntador retornado, así como con las formas.

SWFButton

Los botones pueden tener varios formas asociadas con ellos, el appearace general del botón; un encima de la forma, desplegó cuando el ratón mueve encima del botón; un baje la forma, desplegó cuando los clics del usuario abajo en el botón; y una región del golpe que nunca se muestra pero define el área del clickable del botón.

Crea un botón con:

<?php $b = nuevo SWFButton (); ?> 

Y agrega una forma al botón declara con:

<?php $B->ADDSHAPE($S, SWFBUTTON_HIT | SWFBUTTON_DOWN | SWFBUTTON_OVER | SWFBUTTON_UP); ?> 

Nota que esto agrega la misma forma a todos los estados que los medios que el área del clickable está igual que el área arrastrado de la forma y que el botón parece el mismo cuando tienes el mouse encima de él. Los botones en nuestro ejemplo no serán los mono-cubos de diversión, o, pero nosotros haremos una región del golpe separada:

<?php //haz una región del golpe para el botón $hit = nuevo SWFShape (); $hit->setRightFill($hit->addFill(0,0,0)); $hit->movePenTo(-600, -30); $hit->drawLine(1200, 0); $hit->drawLine(0, 60); $hit->drawLine(-1200, 0); $hit->drawLine(0, -60); ?> 

Sin esto, la región del golpe sería sólo el interior del texto del titular, qué simplemente sería raro. Ahora apretemos fuera esos botones:

<?php for($i=0; $isetFont($f);<$count; ++$i) { $t = new SWFText(); $t-> $t->setHeight(40); $t->setColor(0,0,0); $t->moveTo(-$f->getWidth($title[$i]) * (40/1024)/2, 20); $t->addString($title[$i]); $b[$i] = nuevo SWFButton (); $B[$I]->ADDSHAPE($HIT, SWFBUTTON_HIT); $B[$I]->ADDSHAPE($T, SWFBUTTON_OVER | SWFBUTTON_UP | SWFBUTTON_DOWN); $b[$i]->addAction(new SWFAction ("el getURL (' $url[$i] ', ' el popup')";),SWFBUTTON_MOUSEUP); } ?> 

Así ahora que nosotros tenemos nuestros botones construidos, animémoslos. Estos dos archivos contienen funciones que realizan las varias transiciones entre los titulares:

<?php include (' infuncs.php'); include (' outfuncs.php'); ?> 

Por ejemplo, la función siguiente de infuncs.php resbala el botón de la izquierda mientras la transparencia completa a totalmente opaco:

<?php slideleftin($movie de la función, $shape) { $i = $movie->add($shape); for($j=0; $jmoveTo(600-($j-20)*($j-20), 30);<=20; ++$j) { $i-> $i->multColor(1.0, 1.0, 1.0, $j/20); $movie->nextFrame (); } return $i; } ?> 

Todas las funciones en infuncs.php toman una película y una forma como los argumentos, y devuelve un caso de la forma en la película. Las funciones en outfuncs.php toman la película, la forma, y el caso creadas se aseguran que la lona está vacía cuando ellos vuelven.

Las funciones se listan en las series $infuncs y $outfuncs, mientras permitiéndonos formar, sin referente al php principal codifique en absoluto. Aquí es el pedazo final de código que realiza la animación:

<?php for($n=0; $nnextFrame ();<4; ++$n) { for($i=0; $i<$count; ++$i) { $infunc = $infuncs[array_rand($infuncs)]; $instance = $infunc($m, $b[$i]); for($j=0; $j<60; ++$j) $m-> $outfunc = $outfuncs[array_rand($outfuncs)]; $outfunc($m, $b[$i], $instance); } } header ("Content-type: application/x-shockwave-flash"); $m->output (); ?> 

Véase también

Enlaces externos

  • Tutorial de la biblioteca Ming para PHP
  •   Datos: Q1504993

biblioteca, ming, este, artículo, sección, sobre, informática, necesita, wikificado, favor, edítalo, para, cumpla, convenciones, estilo, este, aviso, puesto, mayo, 2009, biblioteca, open, source, para, creación, ficheros, adobe, flash, realizada, lenguaje, pro. Este articulo o seccion sobre informatica necesita ser wikificado por favor editalo para que cumpla con las convenciones de estilo Este aviso fue puesto el 7 de mayo de 2009 Biblioteca Ming es una biblioteca de open source para la creacion de ficheros SWF Adobe Flash realizada en Lenguaje de programacion C A menudo se utiliza como un modulo PHP permitiendo la generacion de animaciones Flash en el servidor web utilizando la base de datos del mismo Ademas de en PHP la biblioteca se puede utilizar en los lenguajesC Perl Python y RubyMingInformacion generalTipo de programaBibliotecaLicenciaGNU General Public LicenseInformacion tecnicaProgramado enCVersionesUltima version estable0 3 0 15 de febrero 2006Enlaces 1 Repositorio de codigo editar datos en Wikidata Indice 1 Caracteristicas 1 1 Dibujando 1 2 Estilos de relleno 1 3 SWFFill 1 4 SWFBitmap 1 5 SWFGradient 1 6 Transformando su relleno 1 7 Animacion 1 8 Transformar colores 1 9 SWFButton 2 Vease tambien 3 Enlaces externosCaracteristicas EditarMing soporta casi todas las caracteristicas de Flash 4 incluyendo formas gradientes bitmaps pngs y jpegs transformaciones cambio de forma texto botones acciones simbolos graficos clips de pelicula soporte audio mp3 y las transformaciones de color La unica caracteristica que esta haciendo falta es los eventos de sonido Ademas Ming no tiene absolutamente nada que ver con MNG el descendiente animado de PNG Los dos se usan para animacion web ambos son declarados ming pero solo uno se usa para hacer las engorrosas peliculas flash Dibujando Editar El objeto fundamental en una pelicula flash es una forma O en Ming una SWFShape En php instancia un objeto SWFShape con la simple expresion lt php New SWFShape gt Aunque la biblioteca Ming esta escrita en codigo C plano esta disenada para ser utilizada en un ambiente orientado a objetos por consiguiente en PHP tu puedes acceder a las funciones de dibujo de Ming mediante el objeto SWFShape Para dibujar un cuadrado rojo de 400 unidades en cada lado con una anchura de linea de 20 unidades haz lt php s new SWFShape s gt setLine 20 0xff 0 0 s gt drawLineTo 400 0 s gt drawLineTo 400 400 s gt drawLineTo 0 400 s gt drawLineTo 0 0 gt Primero una nota acerca de las unidades la especificacion flash indica una escala de veinte unidades por pixel asi el cuadrado generado mediante el codigo anterior tendria 20 pixeles de lado y una linea de un pixel Sin embargo esta escala no es forzada en ninguna parte la escala depende unicamente del tamano que tu especifiques cuando insertes la pelicula en tu codigo html y del tamano del marco que establezcas dentro de la pelicula lo puedes cambiar despues Nosotros podriamos haber dibujado el cuadrado tambien de 20 unidades con una linea de 1 unidad De cualquier modo nosotros conseguimos el mismo cuadrado si escalamos la pelicula junto con esta Ahora probablemente notaste que el metodo drawLineto unicamente recibe dos argumentos considerando que una linea normal tiene cuatro parametros estos son una coordenada x y una coordenada y para ambos puntos finales Y probablemente concluiste que esto significa que el dibujo en Ming es basado en pluma es decir el objeto forma guarda una referencia de la ubicacion de la pluma imaginaria en la superficie del dibujo y los comandos de dibujo referencian y afectan implicitamente la ubicacion de la pluma Esto debio ser suficiente para que aprendieras que drawLineTo tiene una funcion drawLine relacionada que usa posicionamiento relativo en lugar de coordenadas absolutas En otras palabras las funciones de dibujo anteriores podrian reemplazarse por lt php s gt drawLine 400 0 s gt drawLine 0 400 s gt drawLine 400 0 s gt drawLine 0 400 gt y obtendriamos el mismo cuadrado rojo El metodo setLine recibe cuatro o cinco los argumentos el ancho de la linea y el rojo verde y azul y opcionalmente la transparencia componentes del color de la linea Cuando fijas el estilo de linea este se aplica a todos los comandos de dibujo subsecuentes hasta que cambie de nuevo el estilo de linea con setLine Para no utilizar estilo de linea que a proposito es el valor por defecto para las formas simplemente fija el ancho en cero Finalmente estos son dos de los comandos de dibujo mas utiles lt php s gt movePenTo x y gt Mueve la pluma a las coordenadas x y sin dibujar linea y movePen es su primo mas cercano mientras que lt php s gt drawCurveTo cx cy el hacha el ay gt Dibuja una curva cuadratica bezier simple desde la ubicacion actual de la pluma hasta el punto ax ay usando el punto cx cy como un punto de control Como esperamos drawCurve hace lo mismo excepto que usa coordenadas relativas a la posicion actual de la pluma Estilos de relleno Editar Esto puede llegar a ser una cosa muy confusa acerca de Ming de manera que hare algunas aclaraciones antes El formato swf esta disenado para ser compacto y facil de utilizar esto significa que las optimizaciones en los atributos de formas son hechas en el acto no por el reproductor Especificamente cuando estas definiendo una forma debes decirle al reproductor que porcion del espacio entre las lineas debe quedar rellena La razon para esto y me siento libre de saltar este parrafo y no estara en el ejemplo es que el reproductor flash dibuja la forma mientras verifica las lineas y como este recorre cada borde en su definicion de forma revisa los registros de relleno del lado izquierdo y del lado derecho para ver que estilo de relleno se esta aplicando sobre la linea Si el borde es mas denso al norte que al sur el explorador de linea se esta moviendo al lado derecho del borde mientras cruza sobre la linea desde la derecha hacia la izquierda asi empieza rellenando con el estilo de relleno del borde del lado derecho Si el borde fuera mas denso al sur que al norte usaria el estilo relleno del lado izquierdo Fija el relleno del lado izquierdo y del lado derecho mediante los metodos setRightFill y setLeftFill Estos simplemente trabajan como setLine se aplican a todos los bordes subsecuentes hasta que cambie el estilo de relleno de nuevo setRightFill y setLeftFill reciben un argumento un objeto SWFFill SWFFill Editar SWFFill abarca rellenos solidos gradientes y mapas de bits En lugar de instanciar un SWFFill directamente solicitas un SWFShape para que se cree uno para utilizar el metodo addFill de SWFShape La logica detras de esto es que el relleno solo tiene significado dentro del contexto de la forma y veremos por que brevemente addFill viene en una variedad de formatos uno para cada uno de los tipos de relleno que puede crear colores solidos mapas de bits y gradientes lt php f s gt addFill r g b a gt Crea un relleno de color solido con los componentes especificados rojo verde y azul y opcionalmente transparencia Dibujemos un cuadrado rojo relleno lt php s new SWFShape f s gt addFill r g b a s gt setRightFill f s gt movePenTo 200 200 s gt drawLine 400 0 s gt drawLine 0 400 s gt drawLine 400 0 s gt drawLine 0 400 gt Nosotros usamos setRightFill aqui porque dibujamos el contorno del cuadrado en sentido de las manecillas del reloj asi el interior del cuadrado se rellena desde el borde del lado derecho Si hubieramos dibujado el cuadrado un sentido contrario a las agujas del reloj habriamos usado el metodo setLeftFill SWFBitmap Editar Para agregar un relleno de mapa de bits a una forma usamos lt php f s gt addFill bitmap flags gt Donde el mapa de bits es un objeto SWFBitmap creado con lt php b new SWFBitmap filename maskname gt Donde filename es el nombre de un jpeg o un archivo dbl Un archivo dbl es un fichero png convertido mediante la utilidad png2dbl el cual Ming puede procesar mas facilmente Estas conversiones son un rasgo de ming que usted encontrara de vez en cuando La unica razon por la que le pedimos que pase por estos pasos extra es para no tener que utilizar varias bibliotecas de apoyo como libpng para usar ming Algun dia autoconf ordenara este lio y sera capaz de leer pngs gifs y ttfs con una simple llamada a una funcion El programa png2dbl es incluido en el paquete fuente de Ming Tambien sea consciente de que Ming actualmente puede procesar basicamente archivos comprimidos jpeg No trabaja la lectura basica optimizada y progresiva de jpegs El argumento opcional mascara especifica un archivo msk que agrega un canal de transparencia a un mapa de bits jpeg El archivo msk se crea con gif2mask tambien incluido en el paquete fuente Ming El archivo gif de entrada debe ser del mismo tamano del jpeg El mapa de bits resultante es opaco donde la mascara de imagen es blanca semi transparente donde es gris y totalmente transparente donde es negra Es decir el valor de los pixeles del archivo de mascara se usa como el nivel de transparencia para los pixeles de la imagen jpeg El argumento flags puede ser SWFFILL CLIPPED BITMAP o SWFFILL TILED BITMAP e indica si los mapas de bits deben seguir una secuencia que es el valor por defecto en lugar del argumento flags o deben superponerse respectivamente SWFBitmap tambien tiene metodos para obtener las dimensiones de su imagen lt php b gt getWidth b gt getHeight gt Que le permite dibujar un rectangulo del mismo tamano de tu mapa de bits que de hecho es bastante util SWFGradient Editar Los gradientes como ya bien sabes son las transiciones uniformes entre colores En Flash los gradientes pueden ser lineales o radiales pueden contener hasta ocho colores y pueden tener transparencia Para construir una relleno de gradiente primero cree un objeto SWFGradient lt php g new SWFGradient gt Entonces fija los valores iniciales mediante lt php g gt addEntry ratio r g b a gt Donde ratio es un numero entre 0 y 1 y r g y b y opcionalmente a especifican los componentes rojo verde y azul y transparencia de la ubicacion especifica del gradiente Debes tienes que hacerlo agregarlos en orden de incremento de ratio Por ejemplo asi es como creas un simple gradiente negro a blanco lt php g new SWFGradient g gt addEntry 0 0 0 0 g gt addEntry 1 0 0xff 0xff 0xff gt Finalmente tu agrega el gradiente a su forma con lt php f s gt addFill gradient flags gt Donde gradient es su recien creado SWFGradient y las banderas son SWFFILL RADIAL GRADIENT para un sorpresa gradiente radial o SWFFILL LINEAR GRADIENT para el viejo y aburrido gradiente lineal Si no se proporcionan banderas el gradiente por defecto es lineal Transformando su relleno Editar Suponiendo que para ti el nuevo gradiente y relleno con mapas de bits no son muy divertidos en su estado por defecto nosotros amablemente hemos proporcionado los siguientes metodos lt php f gt moveTo x y gt Mueve el relleno a las coordenadas el x y lt php f gt rotateTo deg gt Gira el relleno deg grados y lt php f gt scaleTo xscale yscale gt Fija la escala de relleno en xscale en direccion x y yscale en direccion y Si solo se proporciona un argumento ambas dimensiones son escaladas por xscale Por ultimo lt php f gt skewXTo s f gt skewYTo s gt Sesga el relleno por s en el eje x o en el eje y Una s de 0 no es sesgada una s de 1 0 es sesgada a un angulo de 45 grados Animacion Editar Ahora que hemos definido una forma seguro nos gustaria poder verla Para hacer esto necesitamos un lienzo en el cual dibujar Ese lienzo es el venerado SWFMovie lt php m new SWFMovie gt Crea un nuevo objeto SWFMovie base para la animacion Nosotros podemos usar lt php m gt setBackground r g b gt Para fijar el color del fondo lt php m gt setRate rate gt Para fijar el frame rate en frames por segundo y lt php m gt setDimension width height gt Para fijar el tamano de la pelicula Acuerdate lo que dijimos acerca del escalamiento el tamano de la presentacion establecido en su html determina el tamano real Las dimensiones de la pelicula fijadas aqui determinan la escala en la que sus formas seran dibujadas Si usted fija el tamano de su pelicula en 3200x2400 y lo empotra en una pagina html de 320x240 sus formas seran 1 10 del tamano que usted especifico en sus comandos de dibujo Tu forma no se dibujara en la pelicula hasta que usted cree una instancia de ella llamando lt php i m gt add s gt Este metodo crea una instancia de la forma en la pelicula y retorna una referencia con la que puede alterar la apariencia de la instancia Puedes de hecho agregar la misma forma a su pelicula tantas veces como quieras siendo razonable claro y usar los apuntadores retornados para referenciar cada uno individualmente Usar Ming para hacer peliculas flash es analogo a usar una camara de movimiento debes poner las formas en su lienzo coloquelos como usted guste pulse entonces el obturador para grabar el arreglo y avance al siguiente frame Coloca lt php m gt nextFrame gt El paso arreglo es realizado llamando metodos proporcionados por el apuntador a la instancia que se genero con el metodo add de SWFMovie recuerdas Estos metodos son identicos a los metodos de transformacion que vimos en SWFFill excepto que cada uno tiene una version relativa que actua en relacion con la posicion actual escala rotacion e inclinacion Por ejemplo lt php i gt moveTo x y gt Mueve el objeto a las coordenadas el x y mientras lt php i gt move x y gt Desplaza el objeto con el vector el x y El resto de los metodos son lt php i gt rotateTo deg i gt rotate deg i gt scaleTo xscale yscale i gt scale xscale yscale i gt skewXTo s i gt skewX s i gt skewYTo s i gt skewY s gt Confio en que ya leiste la seccion de transformacion de rellenos y puedes deducir lo que hacen estos metodos ok Tu tambien puedes quitar un objeto de la lista de despliegue si estas cansado de su fisonomia lt php m gt remove i gt Transformar colores Editar Otra cosa que podemos hacer es alterar el color del objeto lt php i gt addColor r g b a i gt multColor r g b a gt El primer metodo agrega un valor constante a cada uno de los canales del objeto de despliegue rojo verde y azul y opcionalmente transparencia El segundo multiplica los canales por los valores de escala dados Nota que estos valores pueden ser negativos para invertir el canal azul de un objeto desplegado tu utilizarias lt php i gt addColor 0 0 0xff i gt multColor 1 0 1 0 1 0 gt Nota tambien que estos metodos no son conmutativos asi lt php i gt addColor 0xff 0 0 i gt addColor 0 0xff 0 gt Finalmente cuando tengas todo listo llama a Ming para enviar la pelicula al navegador lt php header Content type application x shockwave flash m gt output gt El comando header hace que tu servidor web le diga al navegador del cliente que esto es de verdad una pelicula flash Para un ejemplo rapido hagamos que el cuadrado rojo que creamos previamente inmovil en s para ahorrarle a mis dedos un poco de uso el giro m new SWFMovie m gt setDimension 800 600 i m gt add s i gt moveTo 400 300 for j 0 jnextFrame lt 5 j m gt nextFrame i gt rotate 15 m gt nextFrame header Content type application x shockwave flash m gt output Nosotros estamos siendo terriblemente diestros aqui al permitir que el ciclo de animacion vuelva al principio despues de rodar el pobre cuadrado solo 75 grados ya que el primer frame es identico a una rotacion de 90 grados Verdaderamente muy inteligentes nosotros El textoPrimero carga una fuente lt php f new SWFFont filename gt Donde filename es un archivo fdb Si otro formato de archivo ad hoc crea archivos fdb desde las plantillas de archivo flash swt con la utilidad makefdb de Ming El objeto SWFFont le proporciona alguna informacion metrica de la fuente lt php f gt getAscent f gt getDescent f gt getLeading f gt getWidth string gt Cada metodo produce la metrica solicitada como un numero escalado a una altura de fuente de 1024 A menos que este desplegando tu texto a una altura de 1024 necesitaras multiplicar el numero retornado por alto 1024 Puedes ver el manejo de texto mediante lt php t new SWFText t gt setFont f t gt setHeight 240 t gt setColor 0xff 0 0 t gt moveTo 10 250 t gt addString no por favor no mis dedos de los pies gt Agrega un SWFText a tu pelicula con el metodo add de SWFMovie animarlo con el apuntador retornado asi como con las formas SWFButton Editar Los botones pueden tener varios formas asociadas con ellos el appearace general del boton un encima de la forma desplego cuando el raton mueve encima del boton un baje la forma desplego cuando los clics del usuario abajo en el boton y una region del golpe que nunca se muestra pero define el area del clickable del boton Crea un boton con lt php b nuevo SWFButton gt Y agrega una forma al boton declara con lt php B gt ADDSHAPE S SWFBUTTON HIT SWFBUTTON DOWN SWFBUTTON OVER SWFBUTTON UP gt Nota que esto agrega la misma forma a todos los estados que los medios que el area del clickable esta igual que el area arrastrado de la forma y que el boton parece el mismo cuando tienes el mouse encima de el Los botones en nuestro ejemplo no seran los mono cubos de diversion o pero nosotros haremos una region del golpe separada lt php haz una region del golpe para el boton hit nuevo SWFShape hit gt setRightFill hit gt addFill 0 0 0 hit gt movePenTo 600 30 hit gt drawLine 1200 0 hit gt drawLine 0 60 hit gt drawLine 1200 0 hit gt drawLine 0 60 gt Sin esto la region del golpe seria solo el interior del texto del titular que simplemente seria raro Ahora apretemos fuera esos botones lt php for i 0 isetFont f lt count i t new SWFText t gt t gt setHeight 40 t gt setColor 0 0 0 t gt moveTo f gt getWidth title i 40 1024 2 20 t gt addString title i b i nuevo SWFButton B I gt ADDSHAPE HIT SWFBUTTON HIT B I gt ADDSHAPE T SWFBUTTON OVER SWFBUTTON UP SWFBUTTON DOWN b i gt addAction new SWFAction el getURL url i el popup SWFBUTTON MOUSEUP gt Asi ahora que nosotros tenemos nuestros botones construidos animemoslos Estos dos archivos contienen funciones que realizan las varias transiciones entre los titulares lt php include infuncs php include outfuncs php gt Por ejemplo la funcion siguiente de infuncs php resbala el boton de la izquierda mientras la transparencia completa a totalmente opaco lt php slideleftin movie de la funcion shape i movie gt add shape for j 0 jmoveTo 600 j 20 j 20 30 lt 20 j i gt i gt multColor 1 0 1 0 1 0 j 20 movie gt nextFrame return i gt Todas las funciones en infuncs php toman una pelicula y una forma como los argumentos y devuelve un caso de la forma en la pelicula Las funciones en outfuncs php toman la pelicula la forma y el caso creadas se aseguran que la lona esta vacia cuando ellos vuelven Las funciones se listan en las series infuncs y outfuncs mientras permitiendonos formar sin referente al php principal codifique en absoluto Aqui es el pedazo final de codigo que realiza la animacion lt php for n 0 nnextFrame lt 4 n for i 0 i lt count i infunc infuncs array rand infuncs instance infunc m b i for j 0 j lt 60 j m gt outfunc outfuncs array rand outfuncs outfunc m b i instance header Content type application x shockwave flash m gt output gt Vease tambien EditarSWFToolsEnlaces externos EditarLibming Wiki Tutorial de la biblioteca Ming para PHP Datos Q1504993Obtenido de https es wikipedia org w index php title Biblioteca Ming amp oldid 130013233, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos