Escolar Documentos
Profissional Documentos
Cultura Documentos
Aparte de este manual, los elementos que necesitáis para crear vuestras
animaciones son más bien pocos: La aplicación Flash, que puedes descargar en
versión de prueba en el sitio de Macromedia, un navegador web y un editor de
texto como el bloc de notas de Windows.
Los recursos Flash, sitios web en los que podrás encontrar información,
sonidos, animaciones y otros recursos de interés.
Para finalizar, os rogamos que nos contactéis si encontráis algún tipo de errata en
el manual y que no dudéis en aportar cualquier tipo de complemento a los capítulos
añadiendo un comentario por medio del enlace previsto a ese efecto al pie de cada
capítulo.
Qué es Flash
Así, Flash se sirve de las posibilidades que ofrece el trabajar con gráficos
vectoriales, fácilmente redimensionables y alterables por medio de funciones, así
que de un almacenamiento inteligente de las imágenes y sonidos empleados en sus
animaciones por medio de bibliotecas, para optimizar el tamaño de los archivos que
contienen las animaciones.
Esta optimización del espacio que ocupan las animaciones, combinada con la
posibilidad de cargar la animación al mismo tiempo que ésta se muestra en el
navegador (técnica denominada streaming), permite aportar elementos visuales que
dan vida a una web sin que para ello el tiempo de carga de la página se prolongue
hasta límites insoportables por el visitante.
De este modo, Macromedia pone a nuestra disposición una tecnología pensada para
aportar vistosidad a nuestra web al mismo tiempo que nos permite interaccionar
con nuestro visitante. Por supuesto, no se trata de la única alternativa de diseño
vectorial aplicada al Web pero, sin duda, se trata de la más popular y más completa
de ellas.
Para la redacción de este manual, nos hemos servido de Flash MX. Cabe esperar
que lo dicho para esta versión sea aplicable en gran medida a las versiones
precedentes y las que salgan en un futuro.
Nada más instalar y abrir la aplicación por primera vez, accederemos a una ventana
de diálogo que nos propone tres modos de uso distintos:
Este menú aparecerá únicamente la primera vez que abramos Flash, no obstante,
podremos acceder a él desde la barra de herramientas en la sección
Ayuda>Bienvenido.
Ya dentro del programa, tras haber cerrado algunos paneles con el objeto de
disponer de espacio de trabajo, haremos frente a una interface como la que se
muestra en la figura:
Dentro de esta interface, podemos distinguir tres partes principales:
En cierta medida, Flash trabaja como si fuese una película. Una animación es una
sucesión de imágenes fijas que, al pasar rápidamente unas detrás de otras, dan la
impresión de un movimiento. Cada una de estas imágenes fijas es llamada también
fotograma. Los fotogramas son representados bajo forma de rectángulos en la
parte derecha del escenario.
En estos rectángulos podemos alojar tres tipos diferentes de imágenes:
Por otra parte, una animación esta generalmente constituida de una variedad de
objetos diferentes, cada uno de los cuales se introduce en un momento diferente y
presenta un comportamiento independiente al resto de los objetos. De manera a
organizar y editar todos estos elementos Flash permite el uso de capas o calcos.
Así, una animación Flash esta compuesta de una superposición de capas en cada
una de las cuales introduciremos un objeto que tendrá su propia línea de
fotogramas. Estas capas nos permiten trabajar la animación en distintos planos
independientes.
21/3/06 - Como esta es la primera vez que escribo sobre Clases y Objetos, veo
que es necesario insistir en la diferencia entre clase y objeto.
Comencé con el concepto del hombre en su acepción de todo el género humano.
Buscando un concepto lógico pedí por Google "Ferrater Mora concepto hombre" y es
apasionante leer como refuta cada definición: Ser racional, Homo sapiens, Homo
faber, Homo symbolicus, etc. Y al fin da su definición "El hombre es «un modo de
ser su cuerpo»" y la explica largamente.
Por si desea leerla, aquí está:
http://www.ferratermora.com/lang_palabras_section.html
De todos modos doy por hecho que cualquiera sea la idea que ustedes tienen de el
ser humano, saben que es un concepto, una definición, una clase. Y que Juan
Pérez, mi vecino y María Duarte, su esposa son realidades, instancias de la clase. El
objeto es la idea hecha realidad.
La palabra clave extends nos permite extender, ampliar una clase con otras ya
definidas en FLASH. Dentro de la clase métodos de MovieClipentre otras subclases
están definidas la clase startDrag y la clase stopDrag Y la palabra extends nos
permite definir una nueva clase, ampliando la clase MovieClip de modo que lleve
dentro de sí, la capacidad de responder a las funciones de startDrag y stopDrag.
2 function Arrastre() {
3 onPress=Arrastrar;
4 onRelease=Soltar;
5 }
Volvemos a la sintaxis de la línea 1 que abre la llave que se cierra en la línea 12.
class Arrastre extends MovieClip {
class Arrastre nos dice que se define una nueva clase
extends MovieClip aclara que es una subclase de la clase MovieClip y que por lo
tanto hereda todo lo que en ella está definido. Extends crea la relación de
subordinación entre las dos clases
A continuación hay que escribir una función que tenga el mismo nombre que la
clase y que explicite con claridad de que se trata esta subclase.
Se trata de una subclase de MovieClip que atiende a las órdenes de Arrastrar y
Soltar.
Esos nombres también los elegimos nosotros y lo decimos en las líneas 2, 3, 4 y 5.
2 function Arrastre() {
3 onPress=Arrastrar;
4 onRelease=Soltar;
5 }
Creamos una función privada para esta clase de clip que no retorna ningún valor.
Por eso Void (por ejemplo no devuelve una string, o un número)
Simplemente ordena para éste clip que se está presionando (this) la función ya
definida startDrag()
Ahora tenemos que hacer que el clip cipres que tenemos en biblioteca posea la
clase Arrastre que hemos definido.
En esta aplicación dibujo.fla participan de la clase arrastre cada una de las piezas
que forman la casa y también el árbol que está detrás de ella.
Como ejercicio crea otro clip y luego en biblioteca le puedes agregar pulsando
Propiedades su participación en esta nueva clase que ya la has puesto como archivo
Arrastre.as en tu carpeta.
También hemos creado otra clase de este mismo tipo que nombramos Calesita
A ella pertenecen, el clip Flores que ves como pastito, el clip sauce y el clip
VerNover que es el texto de entrada.
Clip Calesita
La clase Clic se define con las funciones del sistema start Drag que usamos en la
anterior y nextFrame que nos interesa especialmente porque vamos a hacer
MovieClips de varios fotogramas.
clip VeroNover
Bibliotecas en Flash
Cada uno de los elementos que constituyen una biblioteca son denominados
símbolos. Como hemos dicho, estos elementos podrán ser utilizados en nuestra
animación cuantas veces lo deseemos. No obstante, cada una de estas utilizaciones
no es llamada símbolo, sino ocurrencia.
Por lo tanto, una ocurrencia es cada una de las ocasiones en las que un símbolo
almacenado en nuestra biblioteca es utilizado en nuestra animación.
14/3/03 -
Para empezar, comenzaremos por generar un documento en blanco por medio de:
Llegados a este punto veremos aparecer en la pantalla una ventana como la que
veis en la ilustración.
Para insertar el símbolo lo podemos hacer a partir del botón con una cruz situado
en la parte inferior izquierda de la ventana de la biblioteca, o bien ir a la barra de
menús y hacer:
Una nueva ventana de dialogo aparece ante nuestros ojos (ver figura abajo). En
ella podremos definir el nombre (para este caso la llamaremos esfera) y el
comportamiento (elegiremos gráfico). Por el momento no entraremos en la
explicación de la opción comportamiento, ya lo veremos más adelante.
Al rellenar debidamente la ventana anterior y Aceptar, veremos como el escenario
se agranda y la barra superior del escenario nos muestra la palabra Esfera. Lo que
ha pasado es que hemos salido de nuestra animación para meternos en un espacio
en el que podemos editar el símbolo que queremos crear. Así que nos ponemos
manos a la obra con nuestra labor de artistas.
Sugerimos repetir este proceso de relleno del círculo con un degradado jugando con
las opciones que nos ofrece el panel mezclador de colores. Podemos ver que es
posible añadir más casitas para conseguir un efecto de coronas o bien cambiar el
tipo de degradado a lineal y más cosas...
Después de dejarnos llevar por nuestra vena creativa podemos volver a cosas más
serias. Para empezar, podemos alinear la esfera con la cruz que define el punto de
alineamiento del símbolo. Para ello, elegiremos la herramienta flecha y
seleccionaremos la esfera desplazando el ratón al mismo tiempo que mantenemos
pulsado el botón izquierdo. Para mover la esfera lo haremos del mismo modo,
desplazando el ratón hasta el lugar apropiado manteniendo pulsado el botón
izquierdo. Podemos precisar el desplazamiento usando las flechas del cursor que
nos permitirán desplazarnos píxel por píxel.
Podemos observar que el círculo vacío del primer fotograma se ha convertido ahora
en un círculo lleno, lo que significa que la imagen clave no esta vacía.
Pasemos ahora a estudiar el tipo de animación que vamos a hacer. Como hemos
dicho, pretendemos simular un movimiento de traslación de la esfera con una
trayectoria elíptica, dando la impresión de un círculo en perspectiva. Esta animación
podría ser definida por tres imágenes clave:
La esfera situada en primer plano al principio de su movimiento.
La esfera situada en segundo plano a mitad de su ciclo de traslación.
Podemos ver cuales serian estas tres imágenes clave en el siguiente esquema:
En nuestro caso, dado que lo que buscamos es una trayectoria cíclica, para no
confundir al objeto definiremos dos líneas distintas, correspondientes a cada media
vuelta. Si no tomásemos esta precaución, el objeto tendría dos posibles sentidos
para llegar a una misma posición. Pasemos pues a definir estas líneas:
Hecho esto, podremos constatar la aparición en la capa 1de una flecha entre el
fotograma 1 y 15 y otra entre el 15 y el 29. Si ahora nos colocamos en alguno de
los fotogramas intermedios, veremos que la imagen que contiene no es la misma
que la de los fotogramas clave 1 o 15, sino un intermedio de posición y tamaño
entre ellas. Como puede verse, el objeto se desplazaría desde 1 hasta 15 y
seguidamente de 15 a 29 siguiendo una línea recta. Para obligarlo a adoptar una
trayectoria elíptica como la definida en la guía de movimiento, tendremos que
localizarnos en cada una de las imágenes clave (1, 15 y 29) y , usando la
herramienta flecha, colocaremos el centro del objeto sobre la línea de la elipse en
cada una de las extremidades correspondientes.
Llegados a este punto, ya solo nos queda ocultar la capa de la trayectoria. Esto
puede hacerse seleccionándola y pinchando sobre el punto que se encuentra bajo el
ojo. El punto se convierte en una cruz, que significa que la capa no es visible,
aunque por supuesto sigue existiendo.
Control>Probar escena
Veremos como hemos saltado a otra nueva ventana que nos muestra la escena
creada, tal y como la veríamos en realidad. Esta ventana nos ofrece múltiples
posibilidades que ya abordaremos en otros capítulos. No obstante, os aconsejamos
el echar un vistazo al tipo de opciones que propone.
Si
lo que deseas es ver la animación directamente en el navegador, es posible hacerlo
seleccionando:
Archivo>Previsualizacion de la publicación>HTML
29/12/03 - Colocar películas Flash en nuestros archivos html, asp, php, etc;
podría ser una de las principales preguntas que hacemos, cuando empezamos a
conocer este grandioso programa, y hacerlo es más sencillo de lo que parece.
Antes debemos tener en cuenta que debemos seguir algunas reglas para que todo
funcione correctamente. Cuando creamos una película con Flash, este genera un
archivo con extensión ".fla", este nos permite crear la película y modificarla. Otro
archivo que se genera es el que tiene la extensión ".swf", este se compone en el
momento que probamos la película, y nos ayuda a ver el resultado de las
creaciones y modificaciones de los archivos ".fla".
3. Dentro del contenido del Bloc de notas, debes buscar las etiquetas
<object>...</object>, copia el contenido que se encuentra entre las esas
etiquetas (lógicamente debes incluir esas etiquetas) y finalmente pégalo en
tus archivos.
Eso es todo, pero recuerda que, de seguir este truco y si no editas la etiqueta <object>, debes
colocar los archivos .swf y .html en el mismo directorio del servidor o disco duro de tu
computadora, de lo contrario las películas Flash no se cargarán.
Nota: Otra manera muy sencilla para insertar una animación Flash en una página web es
utilizar el programa Dreamweaver, también desarrollado por la empresa Macromedia. En dicho
programa existe un botón, en la ventana de objetos comunes, que nos permite seleccionar el
archivo Flash (Con extensión .swf) que deseamos insertar en la página web.
Vemos un sencillo código HTML para visualizar Flash en una página web y
explicamos sus etiquetas.
12/7/07 - Conseguir un código HTML para colocar una película Flash es sencillo. Basta con
tener Flash o Dreamweaver para que estos programas generen el código por nosotros. Pero a
veces no tenemos Flash en nuestro ordenador y sólo tenemos un archivo .swf que tenemos
que incrustar en una página web, entonces podemos crear nosotros mismos el código HTML
para ello.
En este artículo mostraremos el código HTML necesario para visualizar una película Flash,
procurando explicar algunas de sus etiquetas y atributos, para que quede claro lo que estamos
haciendo. Daremos un código de ejemplo que podremos incluir en HTML para mostrar Flash.
Nota: Como decíamos, también podemos obtener el código HTML para incluir un Flash
utilizando el propio programa Flash. Lo explicamos en el artículo: Colocar películas Flash en nuestras
páginas
Veamos primero un posible código HTML para incrustar un Flash en una página.
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0"
width="500" height="350">
<param name=movie value="archivo.swf">
<param name=quality value=high>
<embed src="archivo.swf" quality=high
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="500" height="350">
</embed>
</object>
En el código HTML para insertar Flash tenemos aquí dos etiquetas básicas:
En <object> :
classid: que indica el plugin o componente ActiveX que Internet Explorer
tiene utilizar para cargar la película Flash.
codebase: para indicar dónde está el plugin, si es que lo tiene que descargar
de algún sitio.
Luego anidada dentro de <object> hay que meter una nueva etiqueta, para indicar el
archivo donde está la película Flash, con su ruta:
En <embed> :
src: la ruta y el nombre del archivo Flash a mostrar.
pluginspage: el sitio donde está el plugin necesario para mostrar Flash
Con estas nociones básicas podremos crear nosotros mismos un código HTML para
insertar Flash, esto es, un HTML para incluir flash en una página web.
Flash, nos permite crear botones personalizados, de manera muy rápida; a la vez
nos ayuda a darle mas vida a nuestras páginas web; en pocas palabras, nos ayuda
a hacer más atractivo nuestro sitio y lógicamente eso es lo que queremos para
aumentar el número de visitas a nuestro website.
Empecemos:
La línea del tiempo, del escenario para crear botones es parecida a la siguiente
imagen:
Debemos entender que Reposo, Sobre, Presionado y Zona activa son los cuatro
estados de un botón. Veamos a continuación, qué representa cada estado.
Sobre: es cuando el mouse está colocado sobre el botón, pero aún no se ha hecho
click sobre él.
La cabeza lectora, en la línea del tiempo tiene que estar señalando el estado de
Reposo.
6- Después presiona la tecla F6; ésto hará que la cabeza lectora en la línea del
tiempo pase al estado Sobre.
Como podrás notarlo, el botón se copia, así que no necesitarás hacer un nuevo
dibujo.
8- Después presiona nuevamente la tecla F6, para que la cabeza lectora pase al
estado Presionado, y cambia el color de relleno de la misma forma que lo hicimos
en el paso 7; y escoge un color verde. Finalmente presiona por ultima vez F6 para
pasar al estado Zona activa, ésto hará que se copie el botón. Para este último
estado, no es realmente necesario cambiar el color de fondo.
Con los colores que hemos aplicado, haremos que el botón cambie de color, cuando
se lleven a cabo los Estados de los botones anteriormente descritos.
Nuestro botón ha sido creado, así que puedes volver a la Escena 1, abre la
biblioteca y verás que ahí esta el símbolo llamado "botón 1", podrás arrastrarlo al
escenario las veces que quieras para hacer varias copias de él.
Toma la Herramienta de Texto (A), y escribe lo que desees, después coloca el texto
sobre el botón creado; para probar la película haz la tradicional combinación de
teclas CTRL + Enter. Si después quieres ver la película en tu explorador de internet,
únicamente presiona las teclas CTRL + F12.
Para hacer los enlaces o links, debemos utilizar el panel de Acciones de Flash. Para
poder visualizar dicho panel, dirígete al menú principal y haz click en Ventana >
Acciones.
getURL es la acción que nos permitirá navegar entre páginas web, también permite
pasar variables a otras aplicaciones en una URL definida. Un ejemplo de URL es
http://www.desarrolloweb.com
4- Como habrás notado, al hacer doble click sobre getURL, arriba del cuadro que
está a la derecha del panel de Acciones, aparecen los siguientes campos de texto:
Si vas a hacer un enlace con una página web dentro de tu servidor tienes que
escribir el nombre del archivo, por ejemplo: nombre_de_archivo.html
Si vas a hacer un enlace con una página web que no está dentro de tu servidor
tienes que escribir http://, mas el nombre del archivo, por ejemplo:
http://www.desarrolloweb.com
Ventana: Éste es opcional (si quieres puedes dejarlo vacío). Especifica de qué
forma será cargado el documento o fotograma. Las formas en que se cargarán son:
on (release) {
getURL("http://www.desarrolloweb.com", "_blank");
Puedes ver que la primera linea del script aparece escrito: "on (release)". Es una
acción utilizada en los botones, que indica que la acción que aparece entre "{ }" se
ejecutará inmediatamente después de hacer click sobre el botón, o sea, al liberar el
botón del mouse.
1- Creamos un botón.
2- Click derecho sobre el botón > Acciones
3- Copia las siguientes acciones y pégalas en el panel de Acciones:
on (release) {
getURL("mailto:tu_e-mail@dominio.com");
}
Expliquemos lo anterior:
Interpolación de Formas
Para realizar una interpolación de formas, tenemos que hacer uso de "Fotogramas
clave vacíos", ya que éste nos permite crear un vacío en la línea del tiempo, el cual
nos permitirá crear otras formas u objetos.
En la línea del tiempo, podrás observar que estamos haciendo uso del fotograma 1,
de la capa 1.
2- Haz click en el fotograma 4, después presiona la tecla F6, para crear fotogramas
claves.
3- Después haz click en el fotograma 17 y presiona la tecla F7 para crear un
fotograma clave vacío.
Observa la línea del tiempo, y verás que la cabeza lectora está sobre un fotograma
que no contiene nada; es exactamente en ese fotograma vacío en donde crearemos
la imagen en la que se transformarán los rectángulos anteriormente dibujados.
La combinación de teclas CTRL + B, hará que el texto se separe, para que Flash
interprete cada letra como una imagen individual, de lo contrario Flash interpretará
a la palabra "WEB" como una sóla imagen y la interpolación de formas no
funcionará.
Puedes ver que en la línea del tiempo de la capa 1, aparece el color verde junto con
una flecha que debe extenderse desde el fotograma 4 hasta el 17; es ahí
exactamente donde se realiza la interpolación de formas; como muestra la
siguiente imagen:
13/5/04 -
Interpolaciones de símbolos
Cómo se pueden usar las máscaras para obtener una animación web.
2- Dirígete al fotograma (frame) numero 60 de la "capa 1", haz un click sobre él, y
presiona F6, para que el tiempo de duración de la película sea más prolongado.
3- Crea otra capa (capa 2), después toma la "herramienta óvalo" y dibuja un
óvalo:-)
5- Ahora dirígete al fotograma número 1 de la "capa 2" (es donde está el óvalo),
haz click derecho, y después haz click en la opción "Crear interpolación de
movimiento".
Nuestra línea del tiempo tendría que ser parecida a la siguiente imagen:
Como elegir una imagen y poderla usar como fondo o relleno de manera
sencilla.
¿Cómo se hace?
En el Tool Box panel pulsamos Fill Transform y hacemos click dentro del
rectángulo. Uno de los pájaros queda seleccionado. Podemos cambiar su tamaño o
girarlo pinchando con el ratón en símbolo correspondiente. La totalidad de los
pájaros que forman el relleno quedan modificados de la misma forma.
Modificar Bitmap
Vemos como modificar una imagen importada con el programa Flash.
El Flash no es una programa para retocar fotografias, y por eso no es tan fácil
modificar las imágenes importadas. Se pueden modificar parcialmente a través de
la división o transformar a diseños vectoriales.
- Primero trataremos la división:
En el menu File/Import seleccionamos el archivo Pajaro.bmp.
ColorTreshold: 50. Esto significa que si la diferencia entre los valores RGB de 2
pixeles es menor de 50, entonces el color de los 2 pixeles se considera igual.
Minimum Area: 5
Distribute to Layers
Esta es lo que queríamos lograr: un texto donde todas las letras están animadas.
20/12/04 -
Importar vídeo
- .avi
- Quick Time
- .mpeg
- Digital video
Para que esta frase tenga sentido para todos vosotros, lo mejor es que veamos una
de sus últimas aportaciones.
Se planteó en el foro Como se hizo la sección noticias de www.framemedia.co.uk. En la
web, que me parece muy buena, llama la atención sobre todo por su sencillez y por
este sistema de noticias. Es cierto que esta forma de presentación recuerda mucho,
la verdad es que muchísimo a www.carldekeyzer.com de los grandes www.group94.com.
Divide los elementos que va a usar en 2 grupos diferentes, títulos y textos. Tiene
en el escenario 2 máscaras, una para cada grupo.
La idea es crear 2 grandes MovieClips que contengan por un lado todos los títulos, y
enmascararlos dentro de su espacio, y por otro lado los textos y enmascararlos
también.
Los datos los pone en 2 arrays diferentes, con la idea de poder recogerlos desde un
xml o txt. En el post completo hay un ejemplo de cómo añadirle un xml creado por
kaax
Y el código:
Stage.scaleMode = "noScale";
prof = 10; // Sigo marcandome la profundidad, no me acostumbro al getNextHighestDepth
// Creo 2 arrays, uno con los títulos y otro con los textos.
// La idea es poder recogerlos desde un xml o un txt
News = new Array("noticia 1", "noticia 2", "noticia 3", "noticia 4", "noticia 5", "noticia 6", "noticia 7");
Noticias = new Array("Titulo noticia 1\n\nEste es el texto de la noticia 1", "Titulo noticia 2\n\nEste es el
texto de la noticia 2", "Titulo noticia 3\n\nEste es el texto de la noticia 3", "Titulo noticia 4\n\nEste es el
texto de la noticia 4", "Titulo noticia 5\n\nEste es el texto de la noticia 5", "Titulo noticia 6\n\nEste es el
texto de la noticia 6", "Titulo noticia 7\n\nEste es el texto de la noticia 7");
// Creo un clip "mnu" que serán los botones con los títulos
this.createEmptyMovieClip("mnu", prof++);
// Lo situo donde su máscara. En la escena solo tengo 2 máscaras más el fondo, lo demás lo attacheo
this.mnu._x = msk._x;
this.mnu._y = msk._y;
// lo enmascaro
this.mnu.setMask(msk);
// NOTICIAS
// attacheo "textos"
this.noticias.attachMovie("textos", "textos"+n, prof++);
// les doy su texto
this.noticias["textos"+n].txt.text = Noticias[n];
// Defino yFin
this.noticias["textos"+n].yFin = this.noticias["textos"+(n-1)].yFin + this.noticias["textos"+(n-
1)]._height;
// Coloco el primero
if(isNaN(this.noticias["textos"+n].yFin)){ this.noticias["textos"+n].yFin = 0};
// Les mando a su sitio
this.noticias["textos"+n].easing("_y", this.noticias["textos"+n].yFin, 5);
// ACCIONES BOTONES
// el rollOver y el rollOut, sencillitos
this.mnu["new"+n].rOver._alpha = 0;
this.mnu["new"+n].onRollOver = function() {
this.txt.textColor = 0xffffff;
this.rOver._yscale = 0;
this.rOver._alpha = 100;
this.rOver.easing("_yscale", 100, 6);
}
this.mnu["new"+n].onRollOut = this.mnu["new"+n].onReleaseOutside = function() {
this.txt.textColor = 0x333333;
this.rOver._yscale = 100;
this.rOver.easing("_alpha", 0, 15);
}
// onRelease
this.mnu["new"+n].onRelease = function() {
// La posición que van a tomar el clip de los textos de las noticias.
// Muevo el clip "noticias" entero, pero tomo como referencia el alto de un texto
var newpos = this._parent._parent.msk2._y -
(this._parent._parent.noticias.textos1._height*substring(this._name, 4));
// le mando a su sitio
this._parent._parent.noticias.easing("_y", newpos, 15);
// Llamo a la función ColocaTitulos para colocarme los botoncillos
ColocaTitulos(substring(this._name, 4));
}
}
// Para situar los botones cuando click en alguno
function ColocaTitulos(actual) {
var actual = Number(actual); // transformo el String actual en número para operar con él
// Defino yFin en el botón clickado, y le mando a su sitio (justo debajo de las noticias)
this.mnu["new"+actual].laY = msk2._y - msk._y;
this.mnu["new"+actual].easing("_y", this.mnu["new"+actual].laY, 5);
// Defino y coloco los botones por encima del clickado, tomandolo como referencia
for(n = (actual-1); n>=0; n--) {
this.mnu["new"+n].laY = this.mnu["new"+(n+1)].laY - this.mnu["new"+n]._height;
this.mnu["new"+n].easing("_y", this.mnu["new"+n].laY, 5);
}
// Defino y coloco el boton por debajo del clickado, tomando como referencia la máscara de los textos
this.mnu["new"+(actual+1)].laY = msk2._y + msk2._height - msk._y;
this.mnu["new"+(actual+1)].easing("_y", this.mnu["new"+(actual+1)].laY, 5);
// Defino y coloco los botones por debajo del anterior, tomandolo como referencia
for(n = actual+2; n < News.length; n++) {
this.mnu["new"+n].laY = this.mnu["new"+(n-1)].laY + this.mnu["new"+(n-1)]._height;
this.mnu["new"+n].easing("_y", this.mnu["new"+n].laY, 5);
}
}
www.teacuerdas.com
y la usé en la siguiente muestra que quiero que la vean para tener una idea clara
de lo que pretendemos hacer.
En esta tiendita hay en FLASH un probador de ropa que es lo que haremos aquí.
1) Tener una idea clara de lo que queremos hacer. En este caso lo mejor es entrar
a la tiendita "Sol" y jugar un poco en vestir y desvestir distintas ropas y botas a la
muñeca. Verán que la acción siempre está en los botones que son las ropitas de la
vidriera. En la vidriera, clic sobre la ropita para vestir y el mismo clic para
desvestir. Resumiendo el funcionamiento de la aplicación, con ejemplos:
2) Crear en nuestra computadora una carpeta nueva que podemos llamar probador.
3) Conseguir las imágenes necesarias. Como nuestro propósito es Flash y no el
dominio del tratamiento de imágenes, se las doy prontas. Pero cualquier cosa que
quieran preguntar a este respecto, contestaré por email con mucho gusto. En la
página http://www.delphi.todouy.com/flash/probador/imagenes.html encontrarán todas las que
necesitan.
Con el botón derecho del ratón, hacen clic sobre cada imagen y "Guardar imagen
como.."
y los nueve futuros clips c1.png, c2.png,.... c3.png . Si cambian la extensión .png
por .bmp o .jpg las imágenes saldrán con el fondo celeste y no transparente como
necesitamos.
En propiedades vemos que las dimensiones de esa imagen son 402 x 500. Si la
imagen va a formar parte de
otra página como en el caso de la "tiendita Sol" el escenario debe ser dimensionado
402 x 500 tal cual el fondo.
Y ajustadas las posiciones del fondo.png en el panel Propiedades. A cero tanto "x"
como "y".
Grabamos el fla que también podemos llamar probador.fla y lo pueden probar con
Control Enter .
Clip1, va a estar ahí, pero no queremos que se vea. Para esto escribimos la acción
en el frame 1, (el único frame que tendremos en la línea del tiempo).
En el boton1 escribimos la acción para vestir y desvestir esa blusita azul que es
clip1.
on(press){
if(clip1._visible==false){
setProperty("clip1", _visible, true);
}else{
setProperty("clip1", _visible, false);
}
}
10) Para que no te olvides de nada, comencemos con los botones. Ya transformaste
a b1.png en el boton1, lo ubicaste en la vidriera y le escribiste la acción.
11)Los botones están prontos y en vidriera. Sigues con los clips que vestirán a
Yolanda.
De cada c1.png, c2.png, etc. creas un clip de película con los nombres clip1, clip2,
etc. y lo ubicas vistiendo a Yolanda para apuntar la posición exacta en las
coordenadas x, y, que corresponden, y lo borras del escenario para que quede en la
biblioteca y Yolanda quede en malla para probarle el próximo clip y apuntar sus
coordenadas. Por el momento nada más.
12) Crear la pila de los clip, cada uno según el apunte. Y OJO, NO TE OLVIDES DE
PONER A CADA UNO, SU NOMBRE EN EL PANEL PROPIEDADES
Te quedará así:
13) Completar la acción del frame para que haga invisible la pila entera:
2) Jugando, nos damos cuenta, que la línea de arriba está formada por variables,
esperando que el jugador les adjudique valores, que son las distintas letras que
corresponden.
Ése es nuestro trabajo. Crear en tiempo de diseño las variables y buscar la forma
de, mientras se juega tiempo de ejecución se adjudiquen los valores.
La primera capa, se llamará fondo y tendrá solo gráficos para identificar las letras y
las ventanitas con sus botones.
Te quedará así:
Hacer estos gráficos lleva tiempo. Para lograrlos, primero hay que hacer el cuadrilátero de
fondo como símbolo gráfico, y también cada número. Después sobreponerlos atendiendo a las
coordenadas para que resulten parejos.
No hay nada que aprender aquí más que paciencia y dedicación y no creo que lo necesiten. Por
eso, se los envío para que los bajen:
Con el botón derecho del ratón, hacen clic sobre cada imagen y "Guardar imagen como.."
En la línea de arriba los organizas distanciando las palabras con los números de
cada letra.
En la línea de abajo simplemente los números en orden para que el usuario escriba
las letras y pulse el botón de entrada. Hecho esto, pones candado a la capa, grabas
y pruebas.
4) Creamos la segunda capa. Aquí pondremos las variables y las acciones para
manejarlas. En esta aplicación tratamos los tres tipos de variables: de texto,
numéricas, y booleanas(verdadero, falso).
Comencemos con las de texto: Debemos crear una para cada letra.
Por ejemplo las variables donde la solución es A se llamarán dina, dina1, dina2,
dina3, dina4.
Creas entonces para cada letra un texto dinámico, ajustando las medidas con 28
por ancho y 32 de altura.
Ubicas cada uno de estos textos en su lugar. Superpuestas las capas, se verán así:
Uno para cada número. El mismo tamaño y la misma letra. Para los nombres de las
variables de entrada hemos elegido que comiencen con var y terminen con la letra.
De modo que son: vard, vare, vart, vara, varl, varp, varo, vars, vart.
Superponiendo las capas verás:
6) Los botones se encargarán de tomar los valores impuestos por los jugadores, asignándolos a
las letras (variables dinámicas) que correspondan.
En la tabla siguiente copio primero los códigos de los botones para solo una letra.
Por ejemplo el botón 1 que asigna a la variable dind el valor impuesto en la variable vard.
En cambio los botones asignados a las letras que se repiten en el refrán deben asignar valor a
varias variables.
Y como deseamos ver en pantalla la marcha del contador, ponemos en pantalla un texto
dinámico y nombramos a la variable con el nombre ayudas para que refleje la actualización del
contador.
8) Código de los botones de ayuda.
letra 5
on(press){
letra 9 letra 8 ayudas=ayudas+1;
on(press){ on(press){ varl="L";
ayudas=ayudas+1; ayudas=ayudas+1; dinl="L";
vari="I"; vars="S"; dinl1="L";
dini="I"; dins="S"; dinl2="L";
setProperty("ayudar9", setProperty("ayudar8", dinl3="L";
_visible, false); _visible, false); dinl4="L";
} } setProperty("ayudar5",
_visible, false);
}
He creado una página bruja.html donde pongo las imágenes que necesites bajar y
también las direcciones para que cuando juegas te quede más fácil, con la flechita
1) Tener una idea clara de la salida que pretendemos. Para eso entra a la
página.html y pincha Juego completo. Juega varias veces, y trata de pensar
cuantas herramientas están involucradas, para hacer posible algo tan sencillo.
Iremos paso a paso para cada herramienta. Al grabar usaremos la palabra truco
que no es lo mismo pero es más corta.
2) truco.fla . Abre en tu computadora una carpeta que se llame bruja, para grabar
este primer paso que archivaremos como truco.fla
Si entras a la página bruja.html verás lo que haremos para este archivo: una capa
con el fondo, la bruja y los botones para moverla.
En la página html. Con el botón derecho haces clic sobre la imagen Iz1 -> Guardar
Imagen como -> y la bajas a tu Carpeta bruja. Después:
Archivo -> Importar a biblioteca -> buscas la Carpeta Bruja, seleccionas la imagen
y pulsas Abrir.
La imagen ya está en la biblioteca. La traes al escenario y en el panel de
Propiedades ves que mide 229 x 186 píxeles. La achicas a 130 x105. La conviertes
en símbolo gráfico que llamas brujita.
Ahora los cuatro gráficos que necesitamos deben ser instancias de brujita.
Si hasta ahora todo va bien graba este trabajo que llamamos truco.fla Y no te
olvides de grabar seguido.
En tu biblioteca tienes en este momento una imagen que se llama Iz1 y un gráfico
que se llama brujita.
Si aparece este cuadro debes hacer clic en avanzado porque es el que necesitas
Ahora no estás en la línea del tiempo de truco.fla sino en otra película y la línea del
tiempo es la de clipbruja.
Necesitamos cuatro fotogramas clave, donde van a ir distintas imágenes, así que
conviene crear primero los cuatro y en la línea del tiempo, poner en cada fotograma
la acción:
stop();
Para que los códigos que escribiremos en los botones coincidan con el ejemplo que
tenemos hay que seguir el orden:
En el primer fotograma, traemos de biblioteca el símbolo gráfico izquierda y
atendemos al Panel de Propiedades para que la coordenada
x sea la mitad de ancho
y sea la mitad de alto
An 130 x -65
Al 105.6 y -52.8
El clip de película clipbruja está completo. Para afirmar y salir pulsas Escena1 y
vuelves a la línea del tiempo de truco.fla
El nuevo clip está en la biblioteca.
El estado de truco.fla actual tiene que ser éste. Has puesto en cualquier lugar del escenario a
clipbruja, en la línea del tiempo hay un solo fotograma sin ninguna acción.
Grabas, pulsas Control+Enter para probar y luego Control + tecla b para saber cuánto pesa ese
clip que por ahora está quieto en el escenario.
Verás que pesa 5 Kb.
Para limpiar ese mensaje vuelves a pulsar Control + tecla b.
Vuelve a la página .html y mira de nuevo que nos falta para completar este primer paso que
llamamos truco.fla: El fondo y botones para mover la bruja.
Antes de seguir, mira la biblioteca (Control + L). Ahí tienes 7 elementos. Al pié de la Biblioteca
Hay la opción de crear una Carpeta.
Haz clic allí y ponle el nombre Abruja. Es un método mío poner una A a todos los nombres de
carpeta en la biblioteca, porque como se ordenan alfabéticamente, consigo que queden todas
las Carpetas arriba sin mezclarse con las cosas nuevas que vamos agregando.
Después sin abrir la Carpeta pinchas cada elemento y lo arrastras hasta la Carpeta para
guardarlos allí. Con doble clic abres la Carpeta si lo necesitas, o del mismo modo la cierras.
4) El Fondo.
Deja limpio el escenario y por ahora olvídate de la bruja. En la página html, pulsando con el
botón derecho sobre el fondo, eliges Propiedades y te enteras que el nombre es cielo.jpg y su
tamaño es 960 x 550 píxeles.
También tienes con la opción de Guardar imagen como, que traerla a la Carpeta donde estás
trabajando.
Ahora desde tu trabajo (la aplicación truco.fla ) traes desde la Carpeta a la Biblioteca la imagen
cielo.jpg Te recuerdo que debes usar Archivo-> Importar -> Importar a biblioteca -> cielo.jpg
La imagen cielo está ahora en biblioteca. Antes de traerla al escenario debo darle a éste las
dimensiones 960 x 550 píxeles. Luego traes la imagen y le pones en el Panel de Propiedades las
dos coordenadas x e y a 0 (cero).
Eso es todo sobre la capa fondo. Le pones candado. Grabas, la pruebas y mides su peso. Ahora
pesa 25 Kb.
5)Los botones. Creamos otra capa con el nombre bruja. Traes de la biblioteca clipbruja y la
ubicas en cualquier lado.
Son muy sencillos. Basta un solo gráfico para sacarlos a todos. Dibujé con lápiz grosor 2 color
negro y sin fondo un triángulo de 33 por base, con 52 de altura. Antes de transformarlo a
símbolo lo copié para que me quedaran cuatro triángulos vacíos. Con la herramienta Cubo de
pintura pinté los fondos. Uno con gris matizado, otro con amarillo, otro con rojo y otro con
negro. De a uno, los transformé en símbolos gráficos con los respectivos nombres de gris, rojo,
amarillo, negro.
Hacemos Insertar 'Nuevo símbolo, por nombre flecha, por tipo boton y ' Aceptar.
Aparece el cuadro con los cuatro fotogramas de un botón tipo. En el fotograma Reposo
ponemos el gráfico gris, en el fotograma Sobre el amarillo, en el Presionado el rojo y en Zona
activa el negro.
En todos los casos cuidar que las coordenadas de los símbolos gráficos en el escenario sean x
-16.5 y -26
Para salir del modo edición y volver a la película presionar escena1
El botón flecha está pronto en biblioteca. Traen cuatro instancias de flecha al escenario y las
colocan apuntando a las cuatro direcciones. Lo hacen con la ayuda de Modificar y Rotar. No
necesitamos ponerles nombre en el Panel de Propiedades, porque nunca vamos a referirnos a
ellos. Cada uno tendrá su propia acción dependiendo de hacia donde apunte.
on(press){ on(press){ on(press){ on(press){
clipbruja.gotoAndS clipbruja.gotoAndS clipbruja.gotoAndS clipbruja.gotoAndS
top(1); top(2); top(3); top(4);
clipbruja._x = clipbruja._y = clipbruja._x = clipbruja._y =
clipbruja._x -20; clipbruja._y -20; clipbruja._x + 20; clipbruja._y + 20;
} } } }
Todos se refieren a clipbruja. Si no escriben su nombre en el Panel de Propiedades
no funcionará.
truco.fla que es el primer paso está pronto. Graba, prueba y pesa. Sigue pesando
25Kb.
Lo que vemos en la imagen es lo que tenemos hasta ahora: Dos capas sin ninguna
acción. La capa inferior tiene solo el fondo. La superior la bruja en el clip de película
clipbruja
En la capa bruja también pusimos botones para que la muevan.
Para eliminar todo lo que se refiera a los botones, en la biblioteca, con el botón
derecho pulsas donde dice Aflecha y eliges Eliminar
En la Capa bruja en el primer fotograma pones la acción para que puedas mover la
bruja con las flechas del teclado.
Además creas un fotograma clave. Y en este segundo pones :
gotoAndPlay(1);
Archiva truco2.fla , pruébalo y mide su peso. Pesa lo mismo mover con botones que
con teclas.
Sin embargo si llevaras esto al Navegador, tendrías que agregar un texto, diciendo
que para activar las teclas, el usuario debe antes, hacer clic en el escenario de la
película.
if (Key.isDown(Key.DOWN)){
clipbruja.gotoAndStop(4);
if (clipbruja._y <= 550){
clipbruja._y = clipbruja._y + 10;
}else{
clipbruja._y=0;
}
}
Aclaración
Los códigos me parecen tan claros que no los explico por temor a aburrirlos. Pero
contesto por e-mail con mucho gusto cualquier pregunta sobre este trabajo.
Ponemos candado a las dos capas que ya tenemos, y creamos otra que llamaremos
invasores ubicada al medio de las otras dos.
Al final tendremos 10 invasores pero por ahora con uno alcanza para estudiar la
acción de caída y también la detección del choque con la bruja.
1 if(m1._y <540){
2 m1._y=m1._y+1;
3 }
4 if((m1._x >_root.clipbruja._x)and(m1._x > _root.clipbruja._x+130)and (m1._y >
_root.clipbruja._y)and(m1._y < _root.clipbruja._y+130)){
5 m1._visible=false;
6 }
Segundo if, renglones 4,5 y 6. Teniendo en cuenta que clipbruja mide 130 x 105
tomamos su medida más ancha. Esta medida hace las cosas muy fáciles para el
usuario, pero hacerlo más difícil e interesante queda a la creatividad de ustedes.
Estoy dispuesta a sugerir cambios, pero ahora es importante que todo sea lo más
simple posible.
De forma que, esté donde esté la bruja el lugar que ocupa es lo que está entre (su
coordenada x) y (su coordenada x+130) y entre (su coordenada y) y (su
coordenada y +130) ya que no sabemos si la bruja va a estar vertical u horizontal.
4 Si ( m1 está ocupando el mismo espacio que la bruja) {
5 Entonces, que se vuelva invisible;
6 }
Con esto, truco2.fla queda terminado. Archiven, prueben y pesen. Está pesando 26
Kb.
Recuerden que para probarlo con Control+Intro este es en la computadora de
ustedes, no necesitan pulsar la película para que funcionen las teclas, pero en
Internet hay que hacerlo.
Antes de irse graben también este mismo trabajo como truco3.fla para que nos
quede de respaldo truco2.fla, mientras seguimos complicando el juego. Después
nos quedaremos con el último archivo y aliviaremos la memoria de la máquina
borrando los anteriores.
function invade(clip){
if(clip._y <540){
clip._y=clip._y+1;
}
if((clip._x >_root.clipbruja._x)and(clip._x < _root.clipbruja._x+130)and (clip._y >
_root.clipbruja._y)and(clip._y < _root.clipbruja._y+105)){
clip_y = clip_y; clip.stop();
clip._visible=false;
}
}
Nota que la función tiene un parámetro que figura entre paréntesis. El parámetro
indica que la función va a ser llamada con un argumento general que servirá como
representante de algo singularmente único.
Con otras palabras (clip) es la palabra que después representará a m1, m2, etc.
Después de arreglar la función, la llamas para cada uno de los invasores,
completando así el código para este fotograma:
invade(m1);
invade(m2);
invade(m3);
invade(m4);
invade(m5);
invade(m6);
invade(m7);
invade(m8);
invade(m9);
invade(m10);
truco4.fla Usamos la función getTimer() para que los invasores caigan a distintos
tiempos.
¡No tiene gracia que los invasores caigan todos a la vez! ¡El juego resulta muy fácil!
a = getTimer();
momento = a/100;
b = int(momento)
c=b/10;
Ahora otro arreglo más. Pones candado en las Capas fondo e invasores porque
vamos a trabajar en la Capa bruja
Hasta aquí la bruja llegando a un extremo del escenario aparecía por el otro. Pero
en el viaje vertical eso no nos conviene más. Después de cierta altura, en medio del
mar, la bruja ya no podrá atrapar invasores.
Por eso debemos cambiar para las teclas UP y DOWN el número 540 por el nuevo
que es 417
Y otra reforma en la Capa Invasores, así que candado en las otras y libre ésta.
Vamos a hacer más rápida la caída de los invasores.
En el código del fotograma de esta capa donde dice;
function invade(clip){
if(clip._y <540){
clip._y=clip._y+1;
}
Cambia el número 1 por el número 2 así avanzará a pasos (píxeles) más largos.
Archiva truco4.fla guárdalo, pésalo.
Para el próximo paso guárdalo como truco5.fla .
truco5.fla Usamos la función getTimer() para que los invasores caigan a distintos
tiempos.
on(press){
activar._visible=false;
}
function invade(clip){
if(clip._y <540){
clip._y=clip._y+2;
}
if((clip._x >_root.clipbruja._x)and(clip._x < _root.clipbruja._x+130)and
(clip._y > _root.clipbruja._y)and(clip._y < _root.clipbruja._y+105)){
clip._visible=false;
}
}
if(activar._visible==false){
a = getTimer();
momento = a/100;
b = int(momento)
c=b/10;
if(c >1){invade(m1);}
if(c >3){invade(m10);}
if(c >5){invade(m3);}
if(c >7){invade(m8);}
if(c >9){invade(m5);}
if(c >11){invade(m9);}
if(c >13){invade(m2);}
if(c >15){invade(m6);}
if(c >17){invade(m7);}
if(c >19){invade(m4);}
if(c>44){
contador = 0;
if(m1._visible==false){ contador = contador+1;}
if(m2._visible==false){ contador = contador+1;}
if(m3._visible==false){ contador = contador+1;}
if(m4._visible==false){ contador = contador+1;}
if(m5._visible==false){ contador = contador+1;}
if(m6._visible==false){ contador = contador+1;}
if(m7._visible==false){ contador = contador+1;}
if(m8._visible==false){ contador = contador+1;}
if(m9._visible==false){ contador = contador+1;}
if(m10._visible==false){contador = contador+1;}
Z = 10-contador;
barridos = "barridos "+ contador + ", invadieron mar y tierra " +Z;
}
}
Comentario final.
Traté de que el juego completo pesara lo menos posible. Pesa 31 KB. Hasta que
pese 100 KB, puedes usar tu imaginación y hacerlo más interesante. Después ya
habrá que buscar otras herramientas, tratando de no llegar a tener que decir:
Espere por favor que estamos cargando.
Método hitTest() detector de colisiones.
Les debo esta aplicación porque cuando hice el juego de las brujas me
olvidé que FLASH tiene este método.
Los símbolos los copié del Google y no te los paso porque saqué los de Uruguay,
pero ví que cada país tiene los suyos, a veces igual y otras veces, no.
Si haces esta aplicación puedes dejar los símbolos como imágenes tal como las
traes o convertirlas a en simbolos gráficos y pesarán lo mismo.
if(t02.hitTest(azul2)){
azul2._alpha=80;
}
if(t03.hitTest(azul3)){
azul3._alpha=80;
}
if(t04.hitTest(azul4)){
azul4._alpha=80;
}
if(t05.hitTest(azul5)){
azul5._alpha=80;
}
if(t07.hitTest(azul7)){
azul7._alpha=80;
}
if(t08.hitTest(azul8)){
azul8._alpha=80;
}
if(t09.hitTest(azul9)){
azul9._alpha=80;
}
if(t10.hitTest(azul10)){
azul10._alpha=80;
}
if(t11.hitTest(azul11)){
azul11._alpha=80;
}
if(t12.hitTest(azul12)){
azul12._alpha=80;
}
if(t13.hitTest(azul13)){
azul13._alpha=80;
}
if(t14.hitTest(azul14)){
azul14._alpha=80;
}
if(t15.hitTest(azul15)){
azul15._alpha=80;
}
if(t16.hitTest(azul16)){
azul16._alpha=80;
}
Como ves por el script del frame 1, si el test de impacto (hitTest) detecta la colisión
entre las dos instancias hace que el cuadrado suba el alpha a 80.
Las etiquetas
Como ves las etiquetas se arrastran sin ninguna programación, porque son clips a
los que les hemos agregado la propiedad de ser arrastrados usando la extensión de
la clase MovieClip que ya comentamos en el artículo Clases y objetos en Flash
Se nos ocurrió el nombre Arrastre para esta sub clase, así que en el renglón 1 en la
sintaxis de Flash dice:
2 function Arrastre() {
3 onPress=Arrastrar;
4 onRelease=Soltar;
5 }
6 private function Arrastrar():Void{
7 this.startDrag();
8}
12 }
Una vez que tienes el archivo Arrastre.as en la misma Carpeta donde guardas la
aplicación que estás haciendo, debes extender la propiedad de arrastre a cada
etiqueta.
Para eso seleccionas en la biblioteca con el botón derecho, una por vez, cada clip
etiqueta, pulsas Propiedades y ahí la exportas para ActionScript y la integras a la
clase ActionScript Arrastre.
Cuando la veas como la siguiente imagen pulsas Aceptar.
Te muestro la línea del tiempo con solo dos capas. En la capa cuadros están los
cuadros (azul2, etc) y las etiquetas (t02, etc.)
En la capa señales los símbolos y los textos.
27/7/06 -
Vamos a crear un scroll de texto de la forma más sencilla que hay. Ya será cosa
vuestra hacerlo estéticamente más llamativo o complicarlo más.
Abrimos una nueva película de Flash y vamos a usar una única capa. Con la
herramienta de texto Creamos un campo de texto del tamaño que queramos y
le damos las siguientes propiedades:
Estas propiedades son: Campo de texto tipo dinámico, multilínea para que el texto
pueda ocupar más de una línea, creamos la variable "MiTexto" que es donde,
usando ActionScript, meteremos el texto del scroll. En cuanto al tipo de fuente,
tamaño y color, he puesto una letra Arial, a 14 px y de color azul, vosotros poner lo
que querais. Y por último tenemos estos tres botones: El primero quiere
decir que el texto podrá ser seleccionado por el usuario, el segundo, que el texto
leerá el formato HTML, es decir, podremos poner etiquetas de HTML, y el tercero es
que el campo de texto tendrá un marco alrededor.
Ahora vamos a crear 2 botones, para mover el texto hacia arriba y hacia abajo.
Podeis crear los botones como os apetezca, para este ejemplo, hemos usado unos
de los que vienen en la biblioteca de archivos comunes de Flash MX
(ventana>biblioteca comunes>botones>circle buttons>menu):
Como veis, el botón de abajo, está invertido; para los que esteis muy verdes en
flash, os diré que para darle la vuelta, aunque hay varias maneras, la más sencilla
sería seleccionar el botón y modificar>transformar>voltear verticalmente, y listo.
Bien, la parte del diseño, (lo más sencillo posible), ya está terminada, ahora vamos
a ver el código que necesitamos. Empecemos por el código de los botones;
seleccionamos el botón de arriba, hacemos click derecho sobre él y le damos a
"acciones", se nos abrirá el cuadro de código, y metemos el siguiente:
on (press) {
MiTexto.scroll -= 1;
}
on (press) {
MiTexto.scroll += 1;
}
Por último, nos queda meter el texto en el scroll, seleccionamos el primer y único
fotograma que tenemos, damos click derecho sobre él y nos vamos a 'acciones', y
ponemos:
stop();
MiTexto = "El texto que quieras.";
Un saludo.
02/8/06 - Resultado
Abrimos una nueva película de Flash. Para empezar, vamos a crear dos capas, una
que se llamará "Formulario" y otra "Fondo":
Como veis, tenemos que poner un campo de texto de tipo "introducción de texto",
que sea línea única, con el formato de texto que deseemos (tipografía, color,
tamaño, alineado, etc...), y muy importante, darle un nombre de variable, en este
caso, este campo será para introducir el nombre, y a la variable le hemos dado el
nombre "nom".Con esto ya tenemos el campo nombre, de momento se verá así:
NOTA:
En la capa "Fondo" pondremos el fondo de cada campo, así que los campos de
texto deben ser transparentes, para ello, asegurate de que queda deseleccionado el
botón a la izquierda de "Var" en las propiedades.
Añadimos tres campos de texto más, "E-mail", "Empresa", "Motivo del contacto",
donde haremos exactamente lo mismo, solo que dandole a las variables los
siguientes nombres:
Ahora vamos a crear el campo de texto para el mensaje, este tiene las propiedades
algo distintas:
Los campos que están con asterisco (*) serán obligatorios tal y como se indica, es
decir, si el usuario los deja vacios el mensaje no se enviará y en el cuadro de
estado aparecerá un mensaje de error.
on (release) {
if ((nom=='') or (email=='') or (contacto=='') or (mensaje=='')) {
respuesta = "Hay campos obligatorios sin rellenar. Por favor,
revise el formulario.";
} else {
loadVariablesNum ("php2excel_csv.php", 0, "POST");
respuesta = "El formulario ha sido enviado con éxito.
Nos pondremos en contacto con Ud. lo antes
posible. Reciba un saludo.";
}
}
Aquí lo que estamos haciendo es comprobar que los campos obligatorios no estén
vacios, si alguno de ellos lo esta, en el campo de texto estado aparecerá el mensaje
de error arriba indicado, si no, el correo se enviará y aparecerá el mensaje de envio
exitoso.
Con lo que al apretar el botón borrar todos los campos de texto se borrarán :P
nom=''
email=''
contacto=''
mensaje=''
Esto es para que los campos obligatorios estén vacios cuando se cargue la pelicula
de flash. ¿Por qué?, Las variables que se crean se alojarán en un espacio que le
asigne el sistema operativo en la memoria ram, si no los inicializamos a "vacio",
podrían tener 'basura' con lo que la comprobación de estos campos podría fallar.
stop();
Con esto hemos terminado de crear el formulario en Flash, pero aun no funciona,
nos queda la parte de php.
Un saludo.
Actualización I:
Así que para una web, y para dar una imagen un poco profesional, es
imprescindible usar lenguajes del lado del servidor, para este caso, php.
Actualización II:
Modificados los archivos php para que interpreten correctamente los caracteres
latinos (acentos y eñes).
Actualización III:
Donde esté la página que cargará el formulario, en esa misma carpeta en vuestro
servidor, debe estar también el archivo swf (Flash), los 2 archivos de php,
libmail.php y php2excel_csv.php y el archivo formulario.csv
<?PHP
$archivo = fopen("formulario.csv" , "w");
if ($archivo) {
//variables que hayamos declarado en la pelicula de flash
$datos="Nombre del autor: $nom
+ Su email:,$email
+ Su empresa:,$empresa
+ Motivo del contacto:,$contacto
+ Mensaje:,$mensaje";
fputs ($archivo, $datos);
}
echo $pulsado;
fclose ($archivo);
?>
<?php
include "libmail.php";
$m= new Mail;
//correo desde el que se enviará
$m->From( "correo@correo.com" );
//correo al que se enviará. Se puede poner en ambos lugares el mismo correo
$m->To( "correo@correo.com" );
//el subject del email, será el email que haya escrito el usuario, salvo que lo cambiemos, pon lo que
quieras
$m->Subject( "$email" );
//variables que hayamos declarado en la pelicula de flash
$m->Body( "Nombre del autor:
$nom
Su email:
$email
Su empresa:
$empresa
Motivo del contacto:
$contacto
Mensaje:
$mensaje" );
//Si queremos que el correo se envíe a más cuentas de correo, quitar las barras de comentario y
especificar los correos
//$m->Cc( "alguien@algun_server.au");
//$m->Bcc( "alguien_mas@otro_server.es");
$m->Priority(1) ;
$m->Attach( "formulario.csv", "application/vnd.ms-excel", "attachment" );
$m->Send();
?>
Lo que está de color azul es lo que hay que cambiar, os comento por partes.
Donde dice:
Eso es el archivo adjunto que os llegará con el email, ahí hay que poner el nombre
de las variables que pusimos en flash ($nom, $email, $empresa, etc...) y el texto
de introducción antes de cada campo.
Tal y como está declarado, el texto que aparece antes de las variables se escribirá
siempre tal y como está, y las variables se sustituirán por lo que escriba el usuario.
Bien, en correo desde el que se enviará y correo al que se enviará, poned vuestra
dirección de correo, sin más. Y el Subject es el asunto que aparecerá en el correo.
Tal y como está puesto ahí, en el asunto aparecerá lo que el usuario escriba en el
campo email, ya que a ese campo le he dado el nombre de variable email en Flash
(a las variables en php se les añade el simbolo del Dolar antes, $email). Podeis
poner lo que querais, si poneis una variable de las declaradas en Flash, aparecerá
lo que el usuario ponga en dicho campo, si quereis podeis poner un texto fijo, por
ejemplo:
Hay que hacer exactamente lo mismo que en el primer código que he explicado,
solo que este de aquí es para el mensaje de correo electrónico, y el anterior era
para el archivo adjunto.
//Si queremos que el correo se envíe a más cuentas de correo, quitar las barras de
comentario y especificar los correos
//$m->Cc( "alguien@algun_server.au");
//$m->Bcc( "alguien_mas@otro_server.es");
$m->Cc( "ramon@miweb.com");
$m->Bcc( "lorena@miotraweb.com");
Espero haber resuelto las dudas sobre como configurar este archivo.
Actualización IV:
Para que un correo funcione hacen falta 2 servidores web, uno que envía (SMTP) y
otro que recibe (POP3); un solo servidor puede hacer ambas funciones, por ello, el
formulario funciona perfectamente si lo usamos con correos gratuitos tipo Hotmail,
por que dicho servidor POP3 recibirá el correo, pero no tendrá nada que recibir sin
un servidor SMTP que lo envíe desde nuestra web. los que intenteis usar el
formulario en servidores gratuitos tipos Iespana, Webcindario, Web1000, etc... no
lo conseguireis, por que estos servidores web no tienen servidor de correo SMTP.
Tenedlo en cuenta.
De Access a XML
El desarrollo del tutorial está realizado utilizando una base Access muy sencilla,
pero el ejemplo puede adecuarse a bases más potentes, como SQL Server, con
muy pequeñas modificaciones.
Supongamos que tenemos que tomar datos de una base que utiliza solo 3 tablas,
con la estructura que se detalla en la siguiente figura:
El ejemplo se refiere a una compañía que dispone de Representantes en distintos
países y se propone mostrar en su web realizada en Flash los datos de cada uno
para que sus clientes contacten al representante más cercano.
Se trata de una estructura jerárquica de datos que nos proponemos respetar
cuando consultemos la base (bd_tutorial.mdb).
3. Realizar una película en Flash que lea los datos XML y los muestre a los
visitantes.
Los primeros dos objetivos los realizaremos utilizando una página ASP (entorno
Windows) que denominaremos representantes.asp.
El tercero será desarrollado íntegramente en la parte 2 de este tutorial: de XML a
Flash.
Una vez conectados a la base debemos realizar la primera consulta SQL, que
recuperará la lista de los datos ubicados más alto en la jerarquía, en nuestro caso
las Areas Geográficas. Debemos armar la consulta de tal modo de obtener
únicamente aquellas áreas que tengan algún país asociado. Si algún área no tuviera
todavía países asociados la consulta lo ignorará, como ocurre con "Asia" en la base
de muestra.
Si algún área posee más de un país asociado, lo que es lógico que ocurra,
aparecerá varias veces (tantas como países tenga) por lo que utilizamos el
predicado DISTINCT para obtener cada área una sola vez.
Dim strSQLAreas
strSQLAreas = "SELECT DISTINCT Areas.* FROM Areas INNER JOIN Paises ON Areas.IdArea =" & _
"Paises.AreaPais"
Set rsAreas = Server.CreateObject("ADODB.Recordset")
rsAreas.Open strSQLAreas, Conn, 1
Dentro de cada nodo area tendremos tantos nodos pais (hijos de cada area)
como países tenga esa área.
<lista>
<area nombre="xx">
<pais nombre="yy">
<representante nombre="zz" apellido="zz" telefono="zz" email="zz">
</representante>
<representante nombre="zz" apellido="zz" telefono="zz" email="zz">
</representante>
</pais>
</area>
</lista>
Volviendo al código ASP, la lógica que seguiremos consiste en analizar para cada
Area (bucle Do While #1) qué Países hay, para cada País (bucle Do While #2) qué
Representantes hay y para cada Representante (bucle Do While #3) cuáles son sus
datos.
Ya disponemos de las Areas (en el Recordset rsAreas que obtuvimos más arriba)
por lo que podemos armar los bucles y la escritura del XML de la manera que sigue:
En este punto tenemos una página ASP (representantes.asp) que cada vez que se
ejecuta toma los datos que existan en la base y los graba en un archivo con
formato XML (representantes.xml).
El archivo XML así generado puede verse en cualquier editor de textos aunque es
mejor utilizar algún editor XML como XML Editor o Notepad ++ (decarga gratuita).
En la parte 2 de este artículo: "de XML a Flash", desarrollaremos una película Flash
con la programación necesaria en ActionScript para leer y mostrar dinámicamente
el contenido de nuestro archivo XML, respetando exactamente la estructura de los
datos guardados en la base.
De XML a Flash
2º parte del artículos sobre Bases de datos y XML para Flash utilizando
ASP.
Nota: no se muestran los datos, solo la arquitectura general del archivo para el utópico caso
de un Area con un solo País y dos Representantes.
Desarrollaremos el resto del trabajo dentro del Flash, desde donde cargaremos el
contenido del archivo XML en una serie de Arrays (o Matrices) que a su vez
utilizaremos para mostrar dinámicamente los datos.
En este contexto, dinámicamente significa que crearemos en tiempo de ejecución
los movieclips que contendrán el texto que queremos mostrar.
Para tratar de que la cosa sea un poco más clara comentaremos primero cuáles
serán los Arrays que utilizaremos:
Un Array por cada País, cuyos elementos serán los datos de cada uno de los
Reresentantes de ese País. Este Array es peculiar ya que sus elementos son
en realidad Arrays Asociativos, que guardan pares dato:"valor", y son
especialmente útiles para los datos personales de los Representantes.
Veamos el ejemplo simplificado del Array Argentina: Argentina = ["elem1",
"elem2"] tiene dos asociativos: elem1 = {ciudad:"Buenos
Aires",nombre:"Alejandro",apellido:"González",…etc.} elem2 =
{ciudad:"Córdoba",nombre:"Mabel",apellido:"Lucero",…etc.} Para acceder a
sus valores: Argentina [0].nombre = Alejandro Argentina[1].ciudad =
Córdoba
Trabajando en Flash con ActionScript
Cargar los datos del XML dentro de un Objeto XML del Flash
Construir el esquema de Arrays que analizamos un poco más arriba
Utilizaremos tres bucles for anidados (Areas, Países de cada Area y Representantes
de cada País). Debemos recordar que desconocemos de antemano el nombre que
tomarán la mayoría de los Arrays (dependerán de los datos contenidos en el XML),
por lo que deberán declararse como _root[nombre_variable] (sin punto).
System.useCodepage = true;
// Creamos el objeto que guardará los datos del archivo XML
represXML = new XML();
represXML.ignoreWhite = true;
//Cargamos el archivo XML en el objeto recién creado
represXML.load("../xml/representantes.xml");
// Cuando termina de cargar lo mandamos a organizar para poder mostrar los datos
represXML.onLoad = organizarXML;
stop();
// Esta es la función encargada de armar los Arrays a partir de los datos
function organizarXML() {
// Array para las Areas Geográficas
areas = new Array();
// Primer bucle para buscar Areas revisando todos los primeros nodos
// ejemplo: América del Sur, América Central, etc.
for (yy=0; yy<represXML.firstChild.childNodes.length; yy++) {
// Agregar el nombre del Area (guardado como Atributo) al Array de Areas Geográficas
areas.push(represXML.firstChild.childNodes[yy].attributes.nombre);
// Crear un Array con el nombre de cada una de las Áreas encontradas
_root[represXML.firstChild.childNodes[yy].attributes.nombre] = new Array();
// Segundo bucle para buscar el nombre de los Países (atributo) de cada Area
// ejemplo: Argentina, Brasil, etc.
for (aa=0; aa<represXML.firstChild.childNodes[yy].childNodes.length; aa++) {
// Agregar el nombre del País al Array del Area a la que pertenece
_root[represXML.firstChild.childNodes[yy].attributes.nombre].push( represXML.firstChild.childNodes[yy].
childNodes[aa].attributes.nombre);
// Utilizar el nombre de cada País (ejemplo: Argentina) para crear un nuevo Array
// donde se van a guardar los datos de los Representantes que pertenecen a ese país
_root[represXML.firstChild.childNodes[yy].childNodes[aa].attributes.nombre] = new Array();
// Tercer bucle para entrar a cada Representante y leer sus atributos
for (bb=0; bb<represXML.firstChild.childNodes[yy].childNodes[aa].childNodes.length; bb++) {
// Crear un Objeto para guardar los datos de cada Representante como si fueran propiedades del Objeto
(array asociativo con pares dato:"valor" )
repre = new Object();
repre.ciudad = represXML.firstChild.childNodes[yy].childNodes[aa].childNodes[bb].attributes.ciudad;
repre.nombre = represXML.firstChild.childNodes[yy].childNodes[aa].childNodes[bb].attributes.nombre;
repre.apellido = represXML.firstChild.childNodes[yy].childNodes[aa].childNodes[bb].attributes.apellido;
repre.telefono = represXML.firstChild.childNodes[yy].childNodes[aa].childNodes[bb].attributes.telefono;
repre.email = represXML.firstChild.childNodes[yy].childNodes[aa].childNodes[bb].attributes.email;
// Agrego el Objeto (datos representante) al Array del país
_root[represXML.firstChild.childNodes[yy].childNodes[aa].attributes.nombre].push(repre);
// Elimino el Objeto
delete repre;
}
}
}
// Mandamos los datos ya organizados a que se muestren (la función está más abajo)
mostrarDatos();
}
En este punto tenemos nuestros datos poblando una serie de Arrays y solo nos
resta mostrarlos ordenadamente.
Dado que disponemos de tres tipos de datos: Area, País y los datos del
Representante, agregaremos a la Biblioteca tres movieclips. Cada movieclip tendrá
como contenido cajas de texto dinámico que mostrarán el contenido de las
siguientes variables:
Como la lista resultará extensa (tendrá un desarrollo vertical mayor que el alto de
la película) crearemos otro movieclip vacío (denominado "mc_msk") y dentro
dibujaremos con ActionScript un rectángulo del tamaño apropiado para oficiar de
"ventana". Colocando a "mc_msk" como máscara de "contenedor" lograremos
ocultar el sobrante de la lista y solo restará hacer que "contenedor" se deslice hacia
arriba y hacia abajo dentro de ciertos límites para que todos los Representantes
resultes visibles.
_root.contenedor["mc_repres"+intContaRepres].tx_email = _root[_root[areas[aa]][bb]][cc].email;
intPosicion++;
intContaRepres++;
}
intContaPaises++;
}
}
// Creamos un nuevo mc en el que dibujamos un rectángulo con las dimensiones
// apropiadas para el tamaño de nuestra película
_root.createEmptyMovieClip("mc_msk", 301);
mc_msk._x = 10;
mc_msk._y = 50;
// Dibujamos el rectángulo (en este caso de 530px de ancho por 350px de alto)
// No importan los colores de trazo y relleno porque no se verá, lo utilizaremos como máscara.
with (mc_msk) {
beginFill(0xff0000,50);
lineStyle(1,0x00ff00,100);
lineTo(530,0);
lineTo(530,350);
lineTo(0,350);
lineTo(0,0);
endFill();
}
// Enmascaramos el listado con el recuadro que acabamos de dibujar y LISTO! ;-)
_root.contenedor.setMask(mc_msk);
}
Como último detalle ponemos el código de los botones que manejan el scroll de "contenedor":
Botón Subir:
on (release) {
if (_root.contenedor._y < _root.mc_msk._y) {
_root.contenedor._y += _root.intSeparar;
}
}
Botón Bajar:
on (release) {
if (_root.contenedor._y > _root.mc_msk._height - _root.contenedor._height) {
_root.contenedor._y -= _root.intSeparar;
}
}
Como hacerlo
bframe. Cada página toma como área de impresión aquella que contiene
todos sus elementos. Esta opción puede implicar cambios de escala entre
distintas páginas.
Para definir que fotogramas del clip elegido vamos a imprimir los etiquetamos con
#p, esta operación es necesaria para los tres posibles valores del recuadro de
delimitación.
Ahora que ya sabemos como funciona el método print vamos a ver como está
hecho el ejemplo.
on (release) {
print("imprimible_mc", "bmovie");
}
En la capa etiquetas vemos que los 3 primeros fotogramas tienen una etiqueta #p y
el cuarto y último una #b. Esto nos dice los tres primeros se imprimirán y que el
cuarto nos definirá el área de impresión.
Fijaos en el contenido de los fotogramas 1-3 y vereís que sólo cambia lo que hay en
la capa textos. El resto de capas tienen elementos comunes como los titulos, el
marco o el pie de página.
29/5/07 - Podemos teñir un clip del color que queramos exactamente igual que
con las propiedades de color avanzadas, pero utilizando ActionScript, con el método
Color.setTransform.
Como hacerlo
Para utilizar este método vamos a usar los mismos parámetros que en las
propiedades de color avanzadas, así que si queremos saber los valores que vamos
a necesitar para obtener un determinado color, solo tenemos que conseguir ese
color directamente en el panel y apuntar los valores. En todo caso es muy útil para
hacernos una idea del funcionamiento de este método.
En este ejemplo, haremos que la foto vaya adoptando las propiedades de color de
los pequeños clips que hay a su lado. Haz click sobre ellos para iniciar el cambio.
Sólo hay que sustituir los valores de ra, rb, ga, gb, ba, bb, aa y ab por los que
queramos. Los valores introducidos en este ejemplo son los que tiene un clip por
defecto (100% de porcentaje y 0 de desplazamiento en todos los colores y en el
alpha).
Por si lo queréis también, este es el código del ejemplo. Todo el código está en el
primer fotograma:
//Creamos el Array con los valores iniciales de las propiedades de color de la foto
//es decir los que tiene cualquier clip cuando no lo hemos modificado.
//llamémosles "valores actuales".
valores=new Array(100,0,100,0,100,0,100,0);
//Esta función es la que hará que cambie el color
function cambiarColor(ra,rb,ga,gb,ba,bb,aa,ab){
//cambio es un Array donde se definen los nuevos valores que queremos dar al clip.
//llamemosles "valores de destino".
cambio=new Array(ra,rb,ga,gb,ba,bb,aa,ab);
//creamos el objeto Color y el objeto myColorTransform
foto.myColor = new Color(foto);
foto.myColorTransform = new Object();
//borramos el enterFrame del clip, por si hubiera alguno reproduciéndose a la mitad,
//y creamos uno nuevo
delete foto.onEnterFrame;
foto.onEnterFrame = function() {
//se insertan los valores actuales y se aplica el método al objeto Color.
this.myColorTransform = {ra:valores[0], rb:valores[1], ga:valores[2], gb:valores[3], ba:valores[4],
bb:valores[5], aa:valores[6], ab:valores[7]};
this.myColor.setTransform(this.myColorTransform);
//aquí hacemos un bucle, que repasa todos los valores y los compara con los valores
//de destino. Si valor actual es menor que el de destino, le suma uno, y si
//es al contrario, le resta uno.
for (var contador=0;contador<8;contador++){
if (valores[contador]<cambio[contador]){
valores[contador]++;
}else if (valores[contador]>cambio[contador]){
valores[contador]--;
}
}
//si los valores actuales son iguales que los de destino, para el enterFrame.
if (valores.toString()==cambio.toString()){
delete this.onEnterFrame;
}
//este bucle escribe los valores actuales en las cajas de texto para que los veáis.
for (var contador=0;contador<8;contador++){
_root["valor"+contador]=valores[contador];
}
};
}
//Aquí asignamos las acciones a los botones. Se trata simplemente de llamar a la función
//con diferentes valores de destino.
verde_btn.onRelease=function(){
cambiarColor(88,-143,100,86,32,61,100,0);
}
amarillo_btn.onRelease=function(){
cambiarColor(0,239,-60,229,96,-11,100,0);
}
negativo_btn.onRelease=function(){
cambiarColor(-100,255,-100,255,-100,255,100,0);
}
azul_btn.onRelease=function(){
cambiarColor(43,-31,43,76,43,198,100,0);
}
Vamos a depositar los archivos MP3 en un directorio en la raiz del servidor web
llamado mp3. Si disponemos de la capacidad para ejecutar alguna tecnología de
servidor como ASP o PHP, crearemos dinámicamente un archivo XML con los
nombres de los archivos MP3. Si no tenemos ninguna de estas tecnologías a
nuestro alcance lo mejor es crear el archivo XML manualmente y depositarlo en el
servidor. En cualquier caso, el XML que suministra los datos deberá tener esta
estructura.
En nuestro ejemplo empleamos ASP, para ello nos basamos en el tutorial Como leer
los archivos que hay en una carpeta del servidor con ASP y pasarlo a Flash.
Los otros dos componentes que nos quedan son dos del tipo Label, que nos van a
indicar el título de la canción que se está reproduciendo y el número de temas en la
lista. Sus respectivos nombres de instancia son titulo_lb y cantidad_lb.
on (change) {
_root.cargarMP3(this.selectedIndex);
}
Podéis descargaros este mismo ejemplo y ver cómo funciona: mp3player.zip, contiene
todos los archivos necesarios para ejecutarlo en un servidor ASP excepto los
propios MP3, que ocupan varios megas.
¿No os ha ocurrido nunca esto? Diseñais una web con resolución fija, a 800 x
600px. por ejemplo, y cuando el cliente ve los primeros pantallazos con una
resolución de 1024 x 768 o incluso de 1280 x 1024 px. (cada vez más frecuente
debido al boom de los TFT de 17'') se queja porque considera que hay un área
importante de la pantalla sin utilizar. Llegados a esta situación se presentan dos
alternativas:
COMO HACERLO.
Aunque queremos que los contenidos de la película se adapten al tamaño de la
ventana del navegador, debemos definir un ancho y un alto mínimo para
organizar y diseñar la composición. Trabajaremos con estas dimensiones y
planificaremos al ajuste para resoluciones mayores. En nuestro ejemplo vamos a
trabajar con una película de 600 x 400px. y le asignaremos comportamientos a los
elementos que se ejecutarán cuando se detecte un cambio en el área disponible
para mostrar la peli, es decir, diseñamos la peli pensando en como se debe
reajustar para diferentes tamaños. Todos los elementos ajustables tienen que ser
del tipo movieclip y deben tener su origen en su esquina superior izquierda. Si
tenemos botones o cajas de texto los meteremos dentro de un movieclip.
Tenemos que incluir el swf en el html con unas dimensiones de 100% de ancho y
100% de alto, además de indicarle en la línea de tiempo principal que no quiero
que se reescale, pero sí que se ajuste a la esquina superior izquierda. En el primer
frame escribiremos:
Stage.scaleMode = "noScale";
Stage.align = "TL";
Para almacenar los clips que se tienen que ajustar (que serán todos menos los que
se ajustan arriba a la izquierda) vamos a crear un array o matriz:
myListener.onResize = rec;
function rec() {
alto = Stage.height;
if (alto<alto_minimo) {
alto = alto_minimo;
}
ancho = Stage.width;
if (ancho<ancho_minimo) {
ancho = ancho_minimo;
}
for (var g = 0; clips_ajustables[g]; g++) {
clips_ajustables[g].alinear();
}
}
Esta función obtiene en primer lugar el nuevo tamaño del Stage, lo compara con las
dimensiones mínimas y si es menor asigna el valor mínimo. Después ejecuta el
método alinear() para cada uno de los elementos del array clips_ajustables que son
los clips. Con esto lo que hacemos es ajustar cada clip de la manera que le
hayamos dicho. ¿cómo se lo decimos? Ahora lo vemos...
Para continuar vamos a definir dos métodos o funciones para todos los movieclips
mediante prototipos, los prototipos nos permiten añadir métodos a clases enteras
sin tener que hacerlo individualemente, ya publicaremos un tutorial hablando sobre
ellos. El primer método que implementaremos será setAjuste(ajuste_x,
ajuste_y, ajuste_width, ajuste_height), a través del cual vamos a indicar como
queremos que se ajuste cada clip.
Como se ve al final del bloque de código ejecutamos el método alinear() del clip.
Esta función la definimos de un modo parecido con otro prototipo. Con alinear() lo
que hacemos es ajustar cada clip dependiendo de los ajustes que le hayamos
pasado con setAjuste():
M ovieClip.prototype.alinear = function() {
// si se le ha pasado el parámetro ajuste_width en la función
// setAjuste, significa que debo ajustar el ancho del clip
// cuando reescalo la pantalla
if (this.ajuste_width) {
if (this.ajuste_width.indexOf("%") != -1) {
// si el valor de this.ajuste_width es un porcentaje
this._width = (_root.ancho*parseInt(this.ajuste_width))/100;
} else {
// si el valor de this.ajuste_width es un número de píxeles
this._width = this.ajuste_width;
}
}
// lo mismo con el ajuste del alto del clip
if (this.ajuste_height) {
if (this.ajuste_height.indexOf("%") != -1) {
this._height = (_root.alto*parseInt(this.ajuste_height))/100;
} else {
this._height = this.ajuste_height;
}
}
// ajustes de posicion de los clips
if (this.ajuste_x == "izquierda") {
this._x = this.x0;
}
if (this.ajuste_x == "derecha") {
this._x = Math.round(this.x0+(_root.ancho-_root.ancho_minimo));
}
if (this.ajuste_x == "centrar") {
this._x = Math.round((_root.ancho-this._width)*0.5);
}
if (this.ajuste_y == "arriba") {
this._y = this.y0;
}
if (this.ajuste_y == "abajo") {
this._y = Math.round(this.y0+(_root.alto-_root.alto_minimo));
}
if (this.ajuste_y == "centrar") {
this._y = Math.round((_root.alto-this._height)*0.5);
}
// si el clip tiene un ajuste especial ejecuto su función ajustar
// que hemos definido en el onClipEvent(load) del clip
if (this.ajustePersonalizado) {
this.ajustar();
}
};
onClipEvent (load) {
this.piePagina_txt.autosize = "left";
this.x0 = this._x;
this.y0 = this._y;
// como quiero ajustar el clip
// lo añado al array de clips ajustables
_root.clips_ajustables.push(this);
// este clip va tener un ajuste personalizado,
// va a extender a lo ancho la caja de texto
// que tiene dentro. Para ello definimos su
// ajuste dentro de la función ajustar
ajustePersonalizado = true;
function ajustar() {
this.piePagina_txt._width = _root.tira2_mc._x-_root.tira1_mc._x-26;
this.piePagina_txt._width = _root.tira2_mc._x-_root.tira1_mc._x-26;
this._y = _root.alto-this._height-5;
}
}
En cambio en un clip que se ajusta según los criterios estándar es código sería más
sencillo:
onClipEvent (load) {
this.setAjuste("derecha", "arriba", false, false);
}
COMO HACERLO.
En nuestro ejemplo vamos a recibir datos XML con información de varios modelos
de coches, para ello vamos a cargar un documento de texto con formato xml
llamado coches.xml. Para mostrar el funcionamiento de la clase XML, nos valdrá
este archivo, sin embargo, en proyectos reales, lo corriente es que los datos xml los
recibamos desde una base de datos empleando PHP, ASP o alguna otra tecnología
de servidor.
Si nos fijamos en su estructura vemos que consta de una cabecera donde incluye la
codificación del documento y de un nodo principal de primer nivel llamado . Todos
los documentos XML sólo pueden que un único nodo principal. Dentro de tenemos
los nodos con sus atributos, que son los que realmente contienen los datos de cada
coche.
Para recibir estos datos correctamente en Flash debemos incluir las sentencias en el
primer fotograma:
System.useCodepage = true;
XML.prototype.ignoreWhite = true;
Con la primera línea le indicamos a Flash el sistema de códigos que debe emplear
para no tener problemas con las tildes y otros caracteres especiales. En la segunda
línea le indicamos que no interprete los saltos de línea de todos los futuros
documentos XML como nodos vacíos.
Creamos nuestro objeto XML y definimos la función que se ejecutará una vez la
carga se haya completado.
function pasar_a_array(nodo) {
var objetoCoche = new Object();
var atributos = nodo.attributes;
objetoCoche.marca = atributos.marca;
objetoCoche.modelo = atributos.modelo;
objetoCoche.vMax = Number(atributos.vMax);
objetoCoche.id = Number(atributos.id);
coches_array.push(objetoCoche);
}
Simplemente nos queda introducir el código de los botones para poder ordenar los
datos.
on (release) {
coches_array.sortOn("marca");
verCoches();
}
on (release) {
coches_array.sortOn("vMax", Array.DESCENDING | Array.NUMERIC);
verCoches();
}
on (release) {
coches_array.sortOn("id", Array.NUMERIC);
verCoches();
}
COMO HACERLO.
Primero creamos el archivo explorar.asp que es el que se va a encargar de
mostrar en formato XML la información de los archivos, en este ejemplo se trata de
la carpeta files situada en la raiz de nuestro dominio. En esta carpeta están los
archivos de descarga que acompañan a nuestros tutoriales.
Contenido de explorar.asp
<%
' intentamos evitar la caché del navegador --------------
Response.Expires=0
Response.CacheControl="private"
' ----------------------------------------------------------------
Response.ContentType="text/XML"
'Creamos el objeto FileSystemObject
Set fso = Server.CreateObject("Scripting.FileSystemObject")
' elegimos la carpeta files desde la raiz del servidor web
' sustituir "/files/" por la que os interese
Set folder = fso.GetFolder(Server.MapPath(("/files/")))
Set files = folder.Files '
' construimos el XML ----------------------------------------
Response.Write("<?xml version='1.0' ?><exploracion carpeta='"+folder.Name+"'>")
For Each file in files
fil=file.Name
Response.write("<archivo nombre='")
Response.write(file.Name)
Response.write("' size='")
Response.write(file.size\1024)
Response.Write("' />")
Next
Response.Write("</exploracion>")
' ----------------------------------------------------------------
Set files = nothing
Set folder = nothing
Set fso = nothing
%>
Donde ponéis la carpeta a explorar. Podéis ver el resultado del documento aquí.
XML.prototype.ignoreWhite = true;
miXML = new XML();
miXML.onLoad = verArchivos;
function verArchivos(ok) {
carpetaElegida = this.firstChild.attributes.carpeta;
if (ok) {
var files = this.firstChild.childNodes;
for (var k = 0; files[k]; k++) {
archivos.addItem(files[k].attributes.nombre+" - "+files[k].attributes.size+" KBytes",
files[k].attributes.nombre);
}
} else {
//fallo en la carga
}
}
function clicLista(component) {
getURL("/files/"+component.getSelectedItem().data, "_self");
}
En la primera línea,
XML.prototype.ignoreWhite = true;
le decimos a Flash, que ignore los espacios en blanco y las tabulaciones en el
momento de analizar cualquier XML que carguemos.
Después, definimos el objeto XML que va a recibir los datos del fichero ASP y la
función verArchivos. Esta función se va recorrer el XML y va a añadir un elemento
al listBox por cada archivo que haya en la carpeta a explorar.
Por último falta el código del botón, que es el que carga los datos XML, el código
es:
on (release) {
//evitamos cargar el XML más de una vez
if (!miXML.loaded) {
miXML.load("/asp/explorar.asp");
}
}
Nota: Para comprobar el funcionamiento perfectamente los archivos a cargar deben estar
alojados en un servidor remoto.
Como veremos más delante, este tutorial es el resultado de juntar varios tutoriales
existentes en tutoriales-flash.com.
Lo primero que hay que hacer es crear las miniaturas en nuestro programa de
manipulación de imágenes preferido. Tanto las miniaturas como los originales
deben estar en formato JPEG no progresivo, de lo contrario, Flash Player no
podrá cargarlas.
Una vez que tengamos listos todos los JPEG, los metemos en dos directorios
llamados originales y minis. Es importante que cada imagen tenga el mismo
nombre de archivo en el original y en la miniatura.
Después de esto, preparamos el archivo XML que nos va a dar la lista de fotos.
En este ejemplo se trata del archivo http://www.tutoriales-flash.com/asp/verMiniaturas.asp que
podéis visualizar. Para aprender como enviarle a Flash un XML con la lista de
archivos de determinado directorio tenéis disponible estos otros tutoriales.
Como leer los archivos que hay en una carpeta del servidor con ASP y pasarlo a Flash.
Para el resto del tutorial no saldremos de Flash. Todo el código del ejemplo va en el
primer fotograma salvo unas pequeñas acciones en los botones de pasar página.
Vamos a ir poniendo el código de este primer fotograma en bloques para
comentarlos.
// acciones en fotograma 1
stop();
System.useCodepage = true;
XML.prototype.ignoreWhite = true;
import mx.transitions.Tween;
// separacion-> distancia entre las imágenes
// tanto horizontal como vertical
var separacion:Number = 116;
// vbles para pasar de página
var pagina_actual:Number = 1;
var num_paginas:Number;
// array donde metemos los elementos del XML
var IMG_array:Array;
// objeto XML que carga la lista de miniaturas
En el bloque anterior hemos definido el objeto XML que va a recibir los datos y
también la función encargada de procesarlos.
function crearMiniatura(columnaF:Number, filaF:Number, ruta:String) {
// bajo_clip es el clip que contendrá el marco de la miniatura
var bajo_clip:MovieClip = lienzo_miniaturas.createEmptyMovieClip("bajo_"+filaF+"_"+columnaF,
lienzo_miniaturas.getNextHighestDepth());
// clip contendrá la imagen
var clip:MovieClip = lienzo_miniaturas.createEmptyMovieClip("foto_"+filaF+"_"+columnaF,
lienzo_miniaturas.getNextHighestDepth());
// para cargar la miniatura definimos un objeto MovieClipLoader
// y un objeto detector de eventos
var mi_mcl:MovieClipLoader = new MovieClipLoader();
var miListener:Object = new Object();
mi_mcl.addListener(miListener);
clip.valor = "aaa";
// cargamos la imagen
mi_mcl.loadClip("/minis/"+ruta, clip);
miListener.onLoadStart = function(target_mc:MovieClip) {
// cuando comienza la carga de la imagen
// ponemos al _alpha a 0
target_mc._alpha = 0;
};
miListener.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number)
{
// aquí podéis poner acciones para mostrar una precarga,
// este caso no lo hemos considerado oportuno
};
// cuando ya se ha completado la carga y tenemos disponible el clip
miListener.onLoadInit = function(target_mc:MovieClip) {
// recolocamos la imagen (todavía está oculta, con _alpha=0)
target_mc._x = (separacion*columnaF)+(100-target_mc._width)*0.5;
target_mc._y = (separacion*filaF)+(100-target_mc._height)*0.5;
// recolocamos el marco que rodea a la foto
bajo_clip._x = target_mc._x-5;
bajo_clip._y = target_mc._y-5;
// dibujamos el marco
with (bajo_clip) {
beginFill(0xffffff);
lineStyle(1, 0xEEEEEE, 100);
lineTo(target_mc._width+10, 0);
lineTo(target_mc._width+10, target_mc._height+10);
lineTo(0, target_mc._height+10);
lineTo(0, 0);
endFill();
}
// al pinchar sobre el área del marco,
// mostramos la foto grande con la función
// verFotoGrande
bajo_clip.onRelease = function() {
verFotoGrande(ruta);
};
// muestro la miniatura animando el _alpha hasta 100
var myTween:Tween = new Tween(target_mc, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100,
2, true);
};
}
Hasta aquí hemos definido la función que crea cada una de las miniaturas. En este
tutorial tenéis material de apoyo.
function verFotoGrande(ruta:String) {
clearInterval(intervaloColor);
// creo el clip donde irá la foto grande en una profundidad fija
// para que se reemplace cada vez que pincho en una miniatura
var grande:MovieClip = _root.createEmptyMovieClip("grande_mc", 2*IMG_array.length+11);
// igual con el clip que contendrá el marco
var bajo_grande:MovieClip = _root.createEmptyMovieClip("bajo_grande_mc", 2*IMG_array.length+10);
// posición vertical fija
grande._y = 100;
// para cargar la foto grnade definimos otro objeto MovieClipLoader
// y otro objeto detector de eventos
var grande_mcl:MovieClipLoader = new MovieClipLoader();
var grandeListener:Object = new Object();
grande_mcl.addListener(grandeListener);
// cargo la foto grande
grande_mcl.loadClip("/originales/"+ruta, grande);
grandeListener.onLoadStart = function(target_mc:MovieClip) {
// aplico una transformación de color que deja el clip
// tintado de blanco
myColor = new Color(target_mc);
myColorTransform = new Object();
myColorTransform = {ra:100, rb:255, ga:100, gb:255, ba:100, bb:255, aa:100, ab:0};
myColor.setTransform(myColorTransform);
};
grandeListener.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number,
bytesTotal:Number) {
// aquí podéis poner acciones para mostrar una precarga,
// este caso no lo hemos considerado oportuno
};
grandeListener.onLoadInit = function(target_mc:MovieClip) {
// recolocamos la imagen (todavía está oculta)
target_mc._x = 382+Math.round((315-target_mc._width)*0.5);
// recolocamos el marco que rodea a la foto grande
bajo_grande._x = target_mc._x-5;
bajo_grande._y = target_mc._y-5;
// dibujamos el marco
with (bajo_grande) {
beginFill(0xffffff);
lineStyle(1, 0xEEEEEE, 100);
lineTo(target_mc._width+10, 0);
lineTo(target_mc._width+10, target_mc._height+10);
lineTo(0, target_mc._height+10);
lineTo(0, 0);
endFill();
}
// con estas rutinas hacemos la transición de color desde el blanco
var indiceColor:Number = 255;
intervaloColor = setInterval(cambiarColor, 10);
function cambiarColor() {
myColorTransform = {ra:100, rb:indiceColor, ga:100, gb:indiceColor, ba:100, bb:indiceColor, aa:100,
ab:0};
myColor.setTransform(myColorTransform);
indiceColor -= 2;
if (indiceColor == -1) {
clearInterval(intervaloColor);
}
}
};
}
Ya hemos creado la foto grande. Para hacer las transición de la foto grande hemos
usado el método setTransform de la clase Color. Es este otro tutorial se explica un
ejemplo de su uso.
on (release) {
// activo el botón página+
pMas_btn.enabled = true;
pMas_btn._alpha = 100;
moverLienzo(100-(pagina_actual-2)*464);
pagina_actual--;
// si llego a la primera página
// ya no puedo retroceder, por tanto
// deshabilito el botón
if (pagina_actual == 1) {
pMenos_btn.enabled = false;
pMenos_btn._alpha = 30;
}
}
En página+
on (release) {
// activo el botón página-
pMenos_btn.enabled = true;
pMenos_btn._alpha = 100;
moverLienzo(100-(pagina_actual*464));
pagina_actual++;
// si llego a la última página
// ya no puedo avanzar, por tanto
// deshabilito el botón
if (pagina_actual == num_paginas) {
pMas_btn.enabled = false;
pMas_btn._alpha = 30;
}
}
En este tutorial os hemos enseñado los pasos para hacer una galería de fotos,
ahora es el momento de experimentar con código e introducir vuestras propias
variaciones sobre el ejemplo.
En esta lección haremos nuestro primer archivo en flash. Así que, mucha
atención.
1. Para eso de click sobre Archivo > Nuevo, en el cuadro de dialogo Nuevo
Documento, seleccione Documento de Flash. Si es que no esta seleccionada ya
porque viene de forma predeterminada y de Aceptar.
2. Luego el color de fondo esta de color blanco, si desea puede cambiarlo a su
gusto pulsando sobre la opción Background, y seleccione el de su gusto. Esta
opción esta en el inspector de propiedades. De forma predeterminada debe estar en
550*400.
Dibujo de un cuadrado
Creación de un símbolo
4. Con el fotograma 20 aún seleccionado, elija Insertar > Línea de tiempo >
Fotograma clave. Se añade un fotograma clave al fotograma 20. El fotograma clave
es un fotograma en el que se cambia de manera explícita alguna propiedad de un
objeto. En este nuevo fotograma clave, cambiará la ubicación del círculo.
9. Con esto se crea una animación interpolada que se moverá desde el fotograma 1 al 20.
10. Arrastre la cabecera roja hacia delante y hacia atrás para ver la pre-visualización de su
animación.
11. Luego guarde el archivo, para eso seleccione Archivo > Guardar, elija la ubicación que usted
prefiera siempre y cuando lo guarde con la extensión “.fla”.
13. Seleccione Control > Probar película para probar el archivo FLA.
Nota: En la próxima sección veremos la configuración que hay que hacer para poder publicar
el archivo y lo podamos utilizar a gusto.
Cabecera Flash en Wordpress
Hay que tener en cuenta un pequeño detalle, que al menos a mi me dio la lata. Si
observáis el código de la imagen, la referencia la archivo .swf es relativa, es decir
no es del tipo http://…. dando la url exacta de donde está ubicada en el servidor,
sino que solo pone el nombre del archivo .swf, que deberemos alojar en la carpeta
principal de nuestro wordpress. Ésto tiene una explicación y hay que tenerlo en
cuenta especialmente si usamos botones en el swf, como es el caso de este blog
para dirigirse a las secciones princpales del mismo. El caso es que si usamos la url
en lugar de la ruta relativa, IE funciona perfectamente, pero en Firefox, se visualiza
correctamente el .swf pero los botones no funcionan.
Creo que no me olvidé nada, si no os funcionas ponéos en contacto conmigo y os
ayudaré en lo que pueda. A contanuación os dejo el link del cual podéis descargar
el código que se pone en el header.php para incrustar el swf.
código para incrustar flash en header.php
02/11/07 - Una vez que tengamos esto, vamos a incluir la secuencia dentro de
la línea de tiempo de un movieclip y le vamos a poner un stop(); en el primer
fotograma.
Por otro lado vamos a definir un botón transparente, para ello solo definimos la
zona áctiva, dejando en blanco los fotogramas Reposo, Sobre y Presionado. En este
botón es donde va a ir la programación del ejemplo.
ejemplo_rot3D.fla
COMO HACERLO.
La distorsión se va a hacer según este esquema donde cada bloque representa una
columna de píxeles:
Se va a descomponer la representación gráfica del clip original en filas o columnas
según sea la distorsión horizontal o vertical. Después modificaremos las
dimensiones de estos segmentos y se generará la apariencia de distorsión. Vamos
explicar sólo la distorsión vertical, ya que la distorsión horizontal es prácticamente
igual y las diferencias en el código son mínimas como podréis comprobar más
adelante.
El primer paso consiste en almacenar en un objeto bitmapData los píxeles del clip a
distorsionar. Lo llamaremos bitmap_1. Después vamos a crear un clip vacío que
contendrá el clip con la distorsión aplicada. Su identificador será contenedor. Para
crear la distorsión vamos a descomponer la rejilla de píxeles del objeto bitmap_1
en sus columnas, de modo que nos quedará dentro del clip contenedor una serie
clips de un píxel de ancho y la misma altura que el original. Para copiar estos
píxeles, nos apoyamos en otros objetos bitmapData, que se corresponden con el
identificador bitmap_temp que hay dentro del bucle en el código.
// liberamos memoria
bitmap_1.dispose();
};
miClip.distorsionarV(70);
El código os lo facilitamos en unos archivos .as de modo que para emplearlos tenéis
dos opciones:
Copiar el código del .as dentro de nuestra película.
Usar un #include para disponer de sus funciones.
COMO HACERLO.
El archivo que almacena los comentarios, que en nuestro caso se llama libro.txt,
tendrá este formato:
Para editar este archivo libro.txt cada vez que se incluye un comentario nuevo,
usamos el objeto FileSystemObject de ASP ya que Flash de por sí solo no puede
hacerlo. Además tendrá que estar habilitado el permiso de escritura en el
directorio que lo contenga. Con este archivo add_comentarios.asp llevamos a
cabo la operación.
<%
On Error Resume Next
' Creamos el objeto FileSystemObject llamado fs
Set fs=Server.CreateObject("Scripting.FileSystemObject")
' Abrimos el archivo para modificarlo y nos posicionamos al final
' del archivo, por eso el 2do argumento es 8, si fuera 1 se abriría
' en modo sólo lectura
Set f=fs.OpenTextFile(Server.MapPath("/libro_visitas/libro.txt"), 8)
' Insertamos los datos enviados desde Flash
f.WriteLine("<visita fecha='"& Now &"'>")
f.Write("<autor>")
f.Write(Trim(Request("autor")))
f.WriteLine("</autor>")
f.Write("<comentario>")
f.Write(Trim(Request("comentario")))
f.WriteLine("</comentario>")
f.WriteLine("</visita>")
' Cerramos y borramos los objetos usados
f.Close
Set f=Nothing
Set fs=Nothing
' si Err=0 todo ha ido bien, este valor es devuelto
' a flash para confirmarle la operación
Response.write("error="&Err)
%>
<%
Response.ContentType="text/xml"
' Abro el archivo para leerlo
Set fs=Server.CreateObject("Scripting.FileSystemObject")
Set f=fs.OpenTextFile(Server.MapPath("/libro_visitas/libro.txt"), 1)
' Añado la declaración de documento y abro el nodo principal
Response.write("<?xml version='1.0' encoding='ISO-8859-1' ?><visitas>")
Response.Write(f.ReadAll)
' cierro el nodo principal, con lo que ya tengo
' un XML bien formado
Response.write("</visitas>")
' Cerramos y borramos los objetos usados
f.Close
Set f=Nothing
Set fs=Nothing
%>
La respuesta de este archivo es un XML bien construido que podéis ver aquí. La
razón de guardar el archivo libro.txt en formato incompleto es que se facilita su
actualización de nuevos comentarios. Con cada comentario nuevo simplemente
tenemos que añadir al final los nuevos datos y olvidarnos.
En este punto, vamos a Flash para ver el código ActionScript necesario que va en el
primer fotograma:
Con Open Flash Chart podrás crear gráficas en tu página web con facilidad y sin
necesidad de tener Flash instalado en tu ordenador. En las gráficas podrás cargar
los datos que desees y elegir entre varios tipos de gráficas, los colores, etc. Una
vez publicadas las gráficas en tu sitio web las podrán ver todos los visitantes que
tengan instalado el plugin de Flash, lo que es casi la totalidad del tráfico que podrás
recibir en tu página.
Para hacer unas pruebas del sistema, aunque la versión segunda del proyecto está
en fase Beta, en DesarrolloWeb.com hemos creído que sería mejor ver la segunda
versión. Según dice el autor además, la versión 1 ya no se va a seguir actualizando.
Para incluir en una página web la película Flash tenemos que utilizar un código
como este:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,
0"
width="600"
height="300" id="graph-2" align="middle">
</object>
Este código lo he extraído del tutorial 1 de la creación de gráficas Flash que tienen
en la propia página del proyecto. Es un código normal para incluir una película Flash
en una página web.
Ahora bien, para que esto funcione tienes que tener en cuenta una serie de cosas
que veremos a continuación.
2) Tienes que crear el código JSON para la carga de datos de la gráfica y ponerlo en
el lugar correcto, con el nombre de archivo "data.json". Según la documentación de
Open Flash Chart parece que se busca este archivo de datos en varios lugares ese
archivo json, por ejemplo en la raíz del dominio, pero según las pruebas que he
hecho en desarrolloweb .com, no me ha funcionado así. Luego veremos un ejemplo
de este código y una manera de localizarlo para que funcione el ejemplo, si es que
no queremos colocarlo en la raíz del dominio.
El archivo JSON lo debemos crear para indicarle a la película Flash cuáles son los
datos que se tienen que mostrar. Este archivo se escribe con una sintaxis especial,
en lenguaje Javascript. No te asustes porque la sintaxis es sencilla de leer,
entender, editar según tus necesidades, ya que JSON es una notación entendible
por las personas.
De todos modos, el propio Open Flash Chart tiene una serie de librerías en distintos
lenguajes, como había comentado antes en este artículo de DesarrolloWeb.com,
para generar juegos de datos en sintaxis JSON, por lo que no tendrías por qué
conocer nada sobre JSON para utilizar este componente.
{
"title":{
"text": "Gráfica de prueba - DesarrolloWeb.com",
"style": "{font-size: 20px; color:#999900; text-align: center;}"
},
"y_legend":{
"text": "Gráfica creada con Open Flash Chart",
"style": "{color: #99cc33; font-size: 12px;}"
},
"elements":[
{
"type": "line",
"alpha": 0.5,
"colour": "#0000cc",
"text": "Páginas vistas",
"values" : [14,12,14,9,10,12,15,12,13]
},
{
"type": "line",
"alpha": 0.5,
"colour": "#660033",
"text": "Paginas vistas 2",
"values" : [9,7,8,10,12,14,13,10,11]
}
],
"x_axis":{
"stroke":2,
"colour":"#d000d0",
"grid_colour":"#00ff00"
},
"y_axis":{
"stroke": 4,
"tick_length": 3,
"colour": "#9933ff",
"grid_colour": "#0000ff",
"offset": 0,
"max": 20
}
} Lo he sacado del tutorial
que ofrecen en la página del producto y sólo he adaptado
unas pocas cosas para personalizarlo y de paso conocer algunas de las
funcionalidades de este módulo.
Ahora sólo tendríamos que indicar el lugar donde está el archivo con los datos. Para
ello la forma más sencilla es a través de la URL.
Coloca simplemente el archivo JSON en el mismo directorio que has colocado tanto
la página web con el código HTML para invocar al Flash, como la propia película,
con el nombre "data.json". Así pues tendrás en ese directorio 3 archivos.
Ahora accede a esa página indicando en la URL el nombre del archivo JSON:
http://www.tudominio.com/ruta_de_tu_archivo_html.html?ofc=data.json