Action Script 1
Action Script 1
Introduccin Histrica
ActionScript es un lenguaje de programacin orientado a objetos (OOP), utilizado en especial en aplicaciones web animadas realizadas en el entorno Adobe Flash, la tecnologa de Adobe para aadir dinamismo al panorama web. Fue lanzado con la versin 4 de Flash, y desde entonces hasta ahora, ha ido amplindose poco a poco, hasta llegar a niveles de dinamismo y versatilidad muy altos en la versin 8 de Flash. ActionScript es un lenguaje de script, esto es, no requiere la creacin de un programa completo para que la aplicacin alcance los objetivos. El lenguaje est basado en especificaciones de estndar de industria ECMA262, un estndar para Javascript, de ah que ActionScript se parezca tanto a Java script. El hecho que ActionScript sea una plataforma basada en el estndar ECMA-262, significa bsicamente que es un lenguaje altamente estructurado en clases y permite crear mega-proyectos de animaciones, formularios, bases de datos, etc.
El panel se etiqueta con el nombre Acciones seguido de un palabra clave que especifica el lugar en donde se est escribiendo el cdigo. El panel de Acciones se divide bsicamente en tres secciones: La biblioteca de referencia: Tiene un inventario completo de Clases, funciones, propiedades, mtodos, palabras clave, etc. del programa. El indicador de Seleccin Actual: Marca en donde estamos escribiendo el cdigo ActionScript y los diferentes elementos de la pelcula que esta programados El editor ActionScript: Este es el editor en donde se escribe las sentencias ActionScript.
En el editor ActionScript se puede crear mltiples pestaas a modo de trabajar en diferentes lugares simultneamente sin necesidad de ir donde el objeto o lnea de tiempo en donde se est insertando el cdigo. En la siguiente imagen se muestra una pestaa que indica que el cdigo que se digite en el editor ser en la capa 1: fotograma 1, y que se est ubicado en la lnea 1 y Columna 1 del cdigo.
En la parte superior del editor, se muestran una serie de botones que son de utilidad a la hora de programar y se detallan a continuacin Asistente de segundo nivel ActionScript: Genera una seccin de cdigo de las principales utilidades del ActionScript. Buscador: Herramienta que funciona igual que cualquier editor de texto primitivo y realiza la funcin de buscar y reemplazar. Generador de Rutas: Potente herramienta ActionScript que genera rutas absolutas o relativas de los objetos en Flash.
Verificador: Herramienta depurador de ActionScript que nos indica posibles errores de sintaxis en el cdigo ActionScript. Formato Automtico: Potente herramienta que realiza un dentado de cdigo. Consejos: nos muestra con un ToolTipText sugerencias para escribir cdigo ActionScript. Puntos de corte: Utilidad de depuracin que coloca puntos de corte para examinar el cdigo ActionScript en tiempo de ejecucin.
Es importante recalcar en esta estructura que puede haber un recursividad con las lneas de tiempo y los MovieClips, ya que bsicamente son lo mismo, con la nica diferencia que los MovieClips son lneas de tiempo de Biblioteca y las lneas de tiempo de las capas-Escenas no se encuentran en Biblioteca. Todos estos elementos (a excepcin de _root) tienen nombres definidos por el usuario.
Cuando corre una aplicacin el primer objeto que se activa es el _root que es el objeto madre de la aplicacin, posteriormente se irn tocando aspectos importantes de este objeto, posteriormente se activa la lnea de tiempo principal y este pone los dems objetos que se han creado en la pelcula. En tiempo de diseo (es decir, cuando se estn dibujando y creando los MovieClips, botones, etc.) se pueden colocar nombres a las instancias de botones, MovieClips y fotogramas en el panel del Inspector de propiedades; dichos nombres servirn para invocarlos cuando se est programando; En el caso de los fotogramas, los nicos que pueden tener nombres son los fotogramas claves.
Fundamentalmente el cdigo se inserta en cuatro lugares: 1- En lnea de tiempo principal (fotogramas) 2- En MovieClips 3- En Botones 4- En repositorios externos (Clases) Otra cosa importante a mencionar es que ActionScript aparte de ficheros de salida (swf), tambin tiene un panel de salida de sistema, que es una modalidad parecida a las consolas de SQL o Java. Programa 1(Funcin trace) o Crear un nuevo programa en Flash o o o Dar clic en el fotograma 1 (que ya es un fotograma clave) Presionar F9 verifique que en panel de Acciones diga Acciones fotograma, y escriba la siguiente instruccin:
Se activar el panel de salida, en donde se muestra el mensaje que se coloc en medio de la funcin trace. Dicho panel de salida, se estar ocupando a lo largo de este curso.
Sintaxis en ActionScript
Talvez el primer punto y ms importante a tomar en cuenta es que las instrucciones en ActionScript terminan con un punto y coma. instruccin; Existen palabras reservadas que el generacin) de Flash reconoce con color azul. stop(); A continuacin se listarn algunas instrucciones bsicas que se comenzarn a utilizar para los primeros programas en ActionScript: stop(); gotoAndPlay (10); play(); gotoAndStop (10); Detiene el cabezal en la lnea de tiempo en el fotograma en donde se coloc dicho cdigo. Instruccin que mueve el cabezal al nmero de fotograma o nombre de fotograma especificado y se pone en marcha. Pone el cabezal en marcha Instruccin que mueve el cabezal al nmero de fotograma o nombre de fotograma especificado y se detiene. compilador (de tercera
Strings: Contienen datos Alfanumericos, es decir, letras o nmeros David la sabidura es aplicar, no es saber hola Boleanos: Contienen datos que pueden tener solamente dos valores: True o False
Una visin importante del ActionScript es que las variables se declaran a manera de los lenguajes de Alto nivel (Bueno!, ActionScript es de alto nivel tambin!), tomando en cuenta que las variables no pueden tener multiples tipos de datos, es decir, si una variable es String, dicha variable ser String hasta que muera, si otra es numrica, dicha variable ser nmerica siempre y asi sucesivamente. Otro factor es el nombre de la variable, la versin ActionScript 2.0 soporta la diferencia entre maysculas y minsculas, es decir, si existe una variable con nombre Cuenta est no ser igual a otra con nombre cuenta, a este fenmeno se le llama "case sensitive". Estas no son las nicas variables en ActionScript, pero son las bsicas con las que se puede comenzar a trabajar, posteriormente se vern las variables de Alto nivel.
Declaracin de variables
La sintaxis bsica para crear variables en ActionScript es la siguiente: var NombreVariable:TipoDeDato Donde var es una palabra reservada que indica que se va a declarar o crear una variable; NombreVariable, es cualquier nombre arbitrario siempre y cuando no sea una palabra reservada del lenguaje, y TipoDeDato sea un tipo de dato soportado por el lenguaje (ya vimos cuatro). Se detallan algunos ejemplos explcitos: var Sueldo:Number; var Apellido:String; var Estado:Bolean; En los ejemplos anteriores se han declarado o creado, tres variables, una de tipo Numrico, otra de tipo de Alfanumrico y la otra de tipo Booleano. Afortunadamente el compilador de Flash coloca un facilitador en el momento de estar escribiendo dicho cdigo (Note la cantidad de tipos de datos que ofrece el ActionScript)
Para asignar nombres a las variables, utilizamos el operador (=) Sueldo=300; Apellido=Pleitez Gonzalez; Estado=true;
Tambin puede asignar valores inciales de una sola vez: var Sueldo:Number=300; var Apellido:String=Pleitez Gonzalez; var Estado:Bolean=true; Inclusive puede declarar mltiples variables en la misma lnea de instruccin, utilizando comas: var Sueldo:Number=300, Estado:Bolean=true; Apellido:String=Pleitez Gonzalez,
Programa 2 (Creacin y asignacin de variables) o Crear un nuevo programa en Flash o o o Dar clic en el fotograma 1 (que ya es un fotograma clave) Presionar F9 verifique que en panel de Acciones diga Acciones fotograma, y escriba la siguiente instruccin:
En este programa, hemos declarado una variable de Tipo String, posteriormente en la lnea 2 le asignamos un valor (con sus respectivas comillas), y finalmente con la funcin trace mostramos el valor de dicha variable en la Salida de consola del ActionScript.
Operadores
Los operadores son smbolos que utiliza ActionScript para poder realizar operaciones matemticas y lgicas sobre los operadores, a continuacin se detallan: + * / % = += OPERADORES MATEMATICOS Suma nmeros, o concatena caracteres. Resta nmeros Producto o Multiplicacin de operandos Divisin, denotando cantidad decimales si es necesario. Residuo, operador que se utiliza para calcular el residuo entre dos nmeros. OPERADORES DE ASIGNACIN Asignacin de valor a una variable Prefijos de asignacin es un operador que realiza dos operaciones, la operacin matemtica que le antecede y despus la asigna a la variable, por ejemplo: x+=1;, es el equivalente a x=x+1; esta misma lgica se aplica a las dems funciones: UNARIOS Incrementa el valor en 1 Decrementa el valor en 1 Negacin Informacin de tipo de datos Informacin no definida LOGICOS Igualdad Desigualdad Mayor que Menor que Mayor o igual Menor o igual
Asigna el valor de 1 a la variable x Suma 1 y 4 y lo asigna a la variable x Suma x y 2 y asigna el valor a x Realiza la operacin x-1 y lo asigna a x Compara 1 y 2, como son diferentes da true Compara 1 y 2, como son diferentes da false
Programa 3 (Uso de variables y operadores) o Crear un nuevo programa en Flash o o o Dar clic en el fotograma 1 Presionar F9 verifique que en panel de Acciones diga Acciones fotograma, y escriba la siguiente instruccin:
//inicializando variables var numero1:Number=0, numero2:Number=0, numero3:Number=0; numero1++; //Aumentando numero1 en 1 //Restando numero2 y numero1 y asignndolo a numero1 numero2=5*(3+3); //asignando 30 a la variable numero2 numero3=numero2-numero1; trace(numero3); //resultado 29 o Finalmente presione Ctrl+Enter y vea el resultado.
estacion1=10; //dando valor a estacion1 estacion2=estacion1*2; //dando valor a estacion2 o Ahora de clic al fotograma 10 de la capa animacin y digite el siguiente cdigo:
//dando valor a estacion3 estacion3=estacion1+estacion2; gotoAndPlay(estacion3); //yendo al fotograma 30 o Ahora de clic al fotograma 40 de la capa animacin y digite el siguiente cdigo:
var IntervaloEstaciones:Number; //Declarando una nueva variable IntervaloEstaciones=estacion2-estacion1; //Dando el valor de 10 estacion4=estacion3+IntervaloEstaciones; //Calculando el valor de estacion4 gotoAndPlay(estacion4-2*IntervaloEstaciones); //regresando a la estacion2
Aunque el cdigo aqu descrito para este ejercicio es bastante imprctico, no es la intencin serlo de momento. El programa explica algunos apartados importantes. Las variables se utilizaron a lo largo de la lnea de tiempo principal y funcionaron perfectamente. la funcin gotoAndPlay no solo se le pueden enviar nmeros sino tambin expresiones complejas, como se ver ms adelante tambin se le pueden enviar los nombres de los fotogramas. En el fotograma 40 se declaro una nueva variable (IntervaloEstaciones), esto quiere decir que siempre y cuando se respete la sintaxis las declaraciones pueden ir en cualquier parte de una pelcula.
Nunca usar una variable que no se ha declarado antes, es decir, si se hubiese querido usar la variable IntervaloEstaciones en el fotograma 1, aunque Flash talvez no diese error de compilacin, esto da lugar a errores lgicos y a mala praxis programacional. El mbito de las variables en ActionScript es talvez uno de los aspectos ms importante para comprender la estructura del lenguaje, y mucho de esto tiene que ver con los objetos creados en Flash. Hasta el momento se han creado variables en lnea de tiempo principal, pero Qu ocurre cuando se quiere crear una variable en un MovieClip por ejemplo?, El alcance de dicha variable ser solo del MovieClip o tambin se podr invocar en la lnea de tiempo principal? Para poder contestar esto, tenemos que visualizar que en ActionScript se sigue una jerarqua (ver diagrama del captulo 1), y cuando un objeto se encuentra dentro de otro objeto, para poderlo invocar a l o cualquiera de sus propiedades, tenemos que usar el operador punto (.) de esta manera: ObjetoMadre.ObjetoHijo Bsicamente en ActionScript 2.0 existe una ley: Toda variable, MovieClip, Botn, Pelicula, Imagen, Grafico, etc., son objetos El Concepto Objeto se desarrollar en un nivel superior, pero dado que ActionScript es un lenguaje orientado a objetos (OOL), es imposible no tocar algunos de sus tendencias en los niveles bsicos. Hasta el momento las variables se han ido declarando en la lnea de tiempo principal, por lo tanto dichas variables son objetos de dicha lnea de tiempo, ya que la lnea de tiempo es el estandarte del objeto madre de la pelcula Flash (_root), las variables se pueden invocar tambin de la siguiente forma: _root.NombreVariable Por ejemplo, analice el siguiente cdigo var Sueldo:Number=10 trace(_root.Sueldo); trace(Sueldo); Este cdigo, generara en el panel de salida:10, y lo generara dos veces pues Sueldo es un objeto hijo de la lnea principal (_root). E invocar Sueldo _root.Sueldo hablamos de lo mismo.
Ahora hay que complicarse un poco ms; Cmo se podra invocar una propiedad que pertenece a un MovieClip que se ha insertado en la lnea de tiempo principal? Para poder hacer esto, analice el siguiente programa: Programa 5 (Uso de variable que estn en Objetos secundarios) o Cree un MovieClip, colquele el nombre estrella en el panel del Inspector de propiedades (vea la figura siguiente)
De doble clic sobre el MovieClip y en el fotograma 1 del objeto digite lo siguiente: var Nombre:String="Polar";
trace(Nombre); //Intento de publicar la variable Nombre trace(estrella.Nombre); //Intento de publicar la variable Nombre con su objeto madre o Cree un nuevo fotograma Clave y en dicho fotograma clave digite lo siguiente: trace(Nombre); //Nuevo intento por publicar la variable Nombre trace(estrella.Nombre); trace(_root.estrella.Nombre); stop(); //se detiene la pelicula o Guarde y vea el resultado:
El porqu salen 3 Undefined y dos polares se explican a continuacin: En el primer fotograma la variable Nombre no existe, ni en lnea de tiempo principal, ni en el mismo MovieClip, por lo tanto, los primeros dos trace publican Undefined (variable no definida). Recuerde que el MovieClip corre a la misma velocidad que la lnea de tiempo principal, por lo tanto, la variable en el MovieClip existe hasta que el cabezal pasa el fotograma1. En el fotograma 2 la variable Nombre sigue sin existir, y por eso el tercer Undefined, pero al invocar la variable estrella.Nombre se publica su valor (Polar). Es interesante la ltima invocacin: _root.estrella.Nombre Esto significa que existe un objeto Nombre, que est dentro del objeto estrella, pero a su vez, este est dentro del objeto madre _root. Y como existe dicha variable, se publica su valor. Un corolario de lo visto hasta el momento, es que podra existir dos variables con el mismo nombre, siempre y cuando estos se encuentren en objetos diferentes.
Existen muchos ms mtodos (ver referencia del lenguaje de ActionScript en Flash), aunque para iniciarnos en el funcionamiento de los objetos String, es suficiente. Por ejemplo analice el siguiente cdigo: var Frase:String="Abracadabra"; trace("Analisis de la palabra: "+Frase);
trace("La Palabra tiene: "+Frase.length+" letras"); trace("En la posicin "+0+" esta la letra: " +Frase.charAt(0)); trace("Parte de la palabra: " +Frase.slice(0,4)); Analicemos las 5 lneas de cdigo var Frase:String="Abracadabra"; Se declara una variable de nombre Frase y se le asigna el valor Abracadabra.
trace("Anlisis de la palabra: "+Frase); Aqu ocurre algo nuevo: la funcin trace recibe dos parmetros: una cadena de caracteres (Anlisis de la palabra: ) y la variable (Frase), el operador + lo que hace es concatenar ambas cadenas y el resultado es: Anlisis de la palabra: Abracadabra Ahora vienen las otras tres lneas: trace("La Palabra tiene: "+Frase.length+" letras"); En esta lnea se concatenan dos cadenas y un numero; la primera cadena es La Palabra tiene: , la segunda cadena es letras (note los espacios) y el nmero es la propiedad de la variable String Frase length que para invocarla es Frase.length que para este caso es 11; el resultado es: La palabra tiene: 11 letras Lo importante de esta sentencia, aparte de la utilizacin de la propiedad length es que la suma de una cadena de caracteres y un nmero es otra cadena de caracteres en donde concatena ambos. Ahora la siguiente lnea: trace("En la posicin "+0+" esta la letra: " +Frase.charAt(0)); Esta lnea tambin concatena, pero aqu se invoca la funcin charAt(index), en el lugar del index se encuentra un 0 que indica la posicin 0 y ah se encuentra la primera letra de la variable Frase, esto se explica mejor en la siguiente tabla de esta variable: A 0 b 1 r 2 A 3 C 4 a 5 d 6 a 7 b 8 r 9 a 10
En la posicin 0 se encuentra la letra A, en ActionScript como en otros lenguajes, la primera posicin es siempre 0 y no 1 como el sentido comn indica. El resultado sera: En la posicin 0 esta la letra: A Finalmente: trace("Parte de la palabra: " +Frase.slice(0,4)); La Funcin slice lo que hace es devolver un pedazo de la cadena de caracteres entre la posicin 0 y la posicin 4 (aunque esta posicin no se toma en cuenta en el pedazo resultante) as que basndonos en la tabla antes vista, los caracteres que devuelve la funcin slice son Abra, as que el resultado de esta lnea es: Parte de la palabra: Abra
Para ver ms propiedades y mtodos- de estos objetos, vea el manual de referencia. El siguiente ejemplo utiliza estos tipos de objetos y de paso se utiliza una funcin nueva.
Programa 6 (Uso de Introduccin de texto y Texto Dinmico) Cree un Nuevo documento de Flash e Introduzca dos objetos de Introduccin de Texto en el fotograma1, colquele los nombres de txt_1 y txt_2 respectivamente a los campos de texto, tambin configure que el tamao del texto sea de 30.
Introduzca ahora otro objeto, pero esta vez de Texto Dinmico y colocarle el nombre de txt_suma, y configure que su tamao sea de 30.
var num1:Number=0, num2:Number=0, suma:Number=0; //Crea tres variables para la suma txt_1.background=true; //Establece que txt_1 tendr color de fondo txt_2.background=true; // Establece que txt_2 tendr color de fondo txt_1.backgroundColor=0xFFFF00; //Asigna el color Amarillo a txt_1 txt_2.backgroundColor=0xFFFF00; //Asigna el color Amarillo a txt_2 txt_suma.border=true; //Coloca borde a txt_suma que es el texto dinamico o De clic en el botn y digite lo siguiente: //Evento del botn on(release){ //se invoca num1 y se le asigna el valor nmerico del campo de texto txt_1 _root.num1=Number(_root.txt_1.text); //se invoca num1 y se le asigna el valor nmerico del campo de texto txt_2 _root.num2=Number(_root.txt_2.text); //se invoca suma y se le asigna el valor de la suma de num1 y num2 _root.suma=_root.num1+_root.num2; //se le asigna el valor de suma al texto dinmico txt_suma _root.txt_suma.text=_root.suma; } o Ahora pruebe el resultado:
Es importante mencionar algunos puntos: La propiedad backgroundColor es una variable de tipo Color, un tipo de variable no tratado hasta el momento, pero de fcil entendimiento si se tiene en cuenta que para poder asignar un valor, el valor debe ir precedido de 0x y el cdigo hexadecimal correspondiente. Note como se invoco a las variables num1, num2 y suma desde el botn. Como son variables que se crearon en la lnea de tiempo principal, hay que anteponerles el nombre de su objeto madre, en este caso _root.
El uso de una funcin llamada Number(); que lo que hace es que convierte lo que va entre parntesis en nmero, tomando en cuenta que la propiedad text de los campos de texto son String. Con esto se finaliza este captulo tomando en consideracin que no se han visto todos los tipos de datos en las variables, y que como objetos que son, existen muchos ms estructurados y complejos que se les dedicaran captulos aparte.
comprender. Sin embargo en este captulo se estudiarn sus sintaxis y aplicaciones. Esas sentencias son: La sentencia IF La sentencia IF-ELSE La sentencia IF-ELSE IF La sentencia SWITCH Sentencia WHILE Sentencia DO-WHILE Sentencia FOR
Sentencia IF-ELSE-IF
Esencialmente, un condicional es una manera de elegir entre dos diferentes caminos de accin, dependiendo de si se cumple una determinada condicin. La sintaxis de ActionScript para un condicional es: if (condicin se cumple){ sentencias que se ejecutan si la condicin est cumplida; } y en un modo ms general if (condicin se cumple){ sentencias que se ejecutan si la condicin se cumpli; } else { Sentencias que se ejecutan si la condicin no se cumpli ; }
En la parte de la condicin se utilizan los operadores lgicos ya vistos (==, <=, >=, !=), y se vern tres nuevos: la operacin And, Or y Not. && || ! Operador And, que se devuelve true cuando dos sentencias son verdaderas. Operador Or, que devuelve true si cualquiera de las dos sentencias con verdaderas Operador Not, que devuelve lo contrario a lo que da la sentencia (ya se true o false) Ejemplos: var Numero:Number=20;
if(Numero==20){ trace("El numero es 20"); } Este cdigo declara una variable Numero y le asigna el valor de 20, posteriormente se realiza la pregunta es Numero igual a 20?, en este caso como la condicin resulta afirmativa se ejecuta la sentencia trace. var Edad:Number=20; if(Edad<18){ trace("Eres menor de edad"); } else{ trace("Eres Ciudadano, felicidades!"); } Este cdigo declara una variable Edad y le asigna el valor de 20, posteriormente se hace la pregunta es Edad menor a 18?, si esto es cierto publica Eres menor de edad, sino publica Eres ciudadano, felicidades!, en este caso se cumple la sentencia else.
var Sueldo:Number=800; var Renta:Number=0; if( Sueldo < 300){ Renta=0.1 trace("no se descontar renta"); } else if(Sueldo>=300 && Sueldo <=600){ Renta=Sueldo*0.12; trace("Se descontar de renta: "+Renta+" dolares"); } else if(Sueldo>600 && Sueldo <=1000){ Renta=Sueldo*0.18; trace("Se descontar de renta: "+Renta+" dolares"); } Un cdigo ms elaborado, se declara una variable Sueldo y se le asigna el valor de 800, posteriormente se realiza una pregunta es Sueldo menor a 300?, si esto es cierto Renta es 0, sino se vuelve a preguntar (else if) Es sueldo mayor o igual a 300 y menor o igual a 600? Si esto es cierto se hace el clculo de renta respectivo, si esta pregunta no es cierta, se vuelve a preguntar Es sueldo mayor a 600 y menor o igual a 1000?, si esto es cierto se calcula el 18% del sueldo y se le asigna a Renta. Puede haber casos en que ninguna pregunta se cumpla y por lo tanto no se ejecutan las sentencias.
Sentencia Switch-case
Esta sentencia, realice casi lo mismo que la sentencia IF, con la nica diferencia es que evala una expresin y dependiendo del resultado, se ejecuta el caso especificado. Su sintaxis es la siguiente: switch (expresin) { case valor1 : sentencias case break; case valor2 : sentencias case break; case valorN : sentencias case break; default : sentencias que cierto; break; }
valor1;
valor2;
valorN;
Veamos algunos ejemplos: var idioma:String=Ingles; switch (idioma) { case "espaol" : trace("Bienvenido"); break; case "frances" : trace("Bienvenue"); break; default : trace("Wellcome"); } Este cdigo selecciona una variable llamada idioma y dependiendo de su valor (puede ser espaol, francs o ninguno de ellos), hace su publicacin en el panel salida. Para este cdigo, se ejecuta la opcin default, es decir trace(Wellcome); var Sueldo:Number=400; switch (true) { case (Sueldo<300): trace ("Renta 0"); break; case (Sueldo>=300 && Sueldo<600): trace ("Renta debe ser el 12 por ciento");
break; case (Sueldo>=600 && Sueldo<=1000): trace ("Renta debe ser el 18 por ciento"); break; default : trace ("Descontarle 30 por ciento"); } Este cdigo es ms elaborado y merece especial atencin, la expresin es un valor booleano (true) y los case son condiciones, a la primera condicin que devuelva el true, se ejecutar y saldr del switch. En este caso se ejecuta el segundo case. Todas estas sentencias se pueden utilizar anidadas, es decir se pueden hacer flujos de instruccin ms complejos. Consideremos un programa que de tres campos de texto (Introduccin de texto), se introduzcan nmeros y calcule cual de los tres es mayor y de paso nos diga el programa si ese nmero es par o impar. Programa 7 (Uso de Sentencias if-Else y Switch-Case) o Cree tres controles de Introduccin de texto y un botn en el fotograma 1 o Coloquele nombre a cada control de Num1, Num2 y Num3 respectivamente.
Crear un nuevo fotograma clave en 2, borrar esos controles y ah colocar un control de texto Dinmico.
var cifra1:Number=0, cifra2:Number=0, cifra3:Number=0; Num1.border=Num2.border=Num3.border=true; Num1.background=Num2.background=Num3.background=true; Num1.backgroundColor Num2.backgroundColor=Num3.backgroundColor=0xFFFF00; stop(); o En botn colocar el siguiente cdigo on(release){ _root.cifra1=Number(_root.Num1.text); _root.cifra2=Number(_root.Num2.text); _root.cifra3=Number(_root.Num3.text); gotoAndPlay(2); } o En el fotograma 2 colocar el siguiente cdigo:
var mayor:Number=0; if(cifra1>cifra2){ if(cifra1>cifra3){ mayor=cifra1; } else{ mayor=cifra3; } } else { if(cifra2>cifra3){ mayor=cifra2; } else{ mayor=cifra3; } } switch(true){ case (mayor%2==0): resultado.text="El mayor es: "+mayor+" y es par";break; case (mayor%2==1): resultado.text="El mayor es: "+mayor+" y es impar";break; } stop();
Pruebe la pelcula.
Poco a poco realizamos cdigos ms complicados (apenas es el comienzo todava), en este cdigo cabe hacer una mencin especial sobre las lneas de cdigo del fotograma 1: Num1.border=Num2.border=Num3.border=true; Este cdigo realiza un operacin se asignacin hasta el momento no visto, revisemos de derecha a izquierda, a la propiedad Num3.border se le asigna el valor de true; a la propiedad Num2.border se le asigna el valor de Num3.border, pero como este ya es true, se le asigna true tambin; a la propiedad Num1.border se le asigna el valor de Num2.border, pero como este es igual Num3.border que a la vez es igual a true, entonces le asigna true tambin a Num1.border. La misma lgica se aplica a las otras de background y backgroundColor El desarrollo de sistemas implica el uso de lgica programacional, aqu se ha aplicado un sencillo algoritmo para investigar el nmero mayor de entre tres cifras, existen algoritmos ms complejos para ordenar una serie de nmeros pero esto se hace con otras herramientas.
do { Instrucciones a repetir; } while (condicin es cierta); La diferencia entre el while y el Do While es que en while, si la condicin es cierta no se cumple a la primera vez, no entra, mientras que en el Do-While, la sentencia se ejecuta por lo menos una vez. Una situacin importante tambin es que para que las sentencias While funcionen estas deben de tener una instruccin contador, que vaya cambiando de alguna forma, para que la condicin es cierta se vaya actualizando, veamos el siguiente ejemplo: var i:Number=0; //Inicializa la variable I a 0
while(i<10){ //Mientas I sea menor que 10 trace(i); //imprime i i++; /aumenta i en 1, esta es instruccin contador } Este cdigo hace una operacin bsica en programacin (un clsico de la programacin estructurada), imprime los nmeros del 0 al 9, y lo hace de la siguiente forma: se inicializa la variable contador, en este caso i, posteriormente se realiza la pregunta es i menor que 10?, como esto es afirmativo, se imprime i y despus se ejecuta la instruccin contador que es i++, la instruccin while ordena que se vuelva a ejecutar la pregunta es i menor que 10? Ahora i vale 1 y se repite el ciclo, y no ser hasta que i valga 10 que la pregunta es i menor que 10? Se har falsa y se saldr del ciclo. Este funcionamiento base es el que se tendr en cuenta en los ciclos complejos. Ms ejemplos: var Suma:Number=0; //inicializa Suma var i=Number=1; //Inicializa I en 1 while(i<=10){ //Hacer mientras I sea menor que 10 Suma+=i; //Suma=Suma+I; i++; //contador } trace(Suma); //Imprime la Suma Cdigo que suma los nmeros del 1 al 10. var Factorial:Number=1; //inicializa factorial en 1 var i=1; var Limite=5; //Limite en 5 do{ Factorial*=i; //Factorial=Factorial*i i++; } while(i<=Limite); //Si i es menor que limite entonces regresar a do trace(Factorial); //Imprime Cdigo que calcula el factorial de la variable Limite, en este caso 5(120). var Palabra:String="Murcielago"; //Asignacin de una palabra var Encontrado:Boolean=false; //Encontrado se inicializa a false var letra:String="a"; //letra a buscar var i:Number=0; //variable contador // si Encontrado es igual a false e i es menor que el ancho de la palabra? while(Encontrado==false && i<=Palabra.length){ //es la letra en la posicin i de la palabra igual a letra if(Palabra.charAt(i)==letra){ Encontrado=true; //si es asi, Encontrado es igual a true y sale ciclo. } i++; }
if(Encontrado){ trace("la letra "+letra+" fue encontrada en la palabra "+Palabra); trace("En la posicion "+i); } else{ trace("la letra "+letra+" no fue encontrada en la palabra "+Palabra); } Hermoso cdigo que busca una letra la variable Palabra, y cuando la encuentra se sale del ciclo e imprime en qu posicin est la letra, sino la encuentra publica la letra no fue encontrada. Se invita al lector a analizar el cdigo.
var i:Number; var limite:Number=5; var factorial:Number=1; for(i=1;i<=5;i++){ factorial*=i; } trace(factorial); Cdigo que calcula el factorial de limite
var i:Number; var anios:Number=1; var interes:Number=0.03; var Saldo:Number=200; for(i=1;i<=anios;i++){ Saldo+=Saldo*interes; } trace(Saldo); Cdigo que calcula el Saldo a favor despus de cierta cantidad de anios al tanto de inters anual
_x _y _xscal
Propiedad que establece la locacin en coordenada x del objeto. Propiedad que establece la locacin en coordenada y del objeto. Propiedad que establece la escala en ancho con proporcin 1:1
e _yscal e _alph a
del objeto Propiedad que establece la escala en alto con proporcin 1:1 en y Propiedad que establece el color alfa del objeto, tomando en consideracin que alfa=0 es transparencia y alfa=100 es el color normal del objeto.
Tcnicamente hablando son propiedades internas de los objetos y no se necesita declararlas, ya que estas implcitas al dibujar los objetos. Programa 8: Movimiento rectilneo primitivo con Bucle en lnea de tiempo
Cree un MovieClip de un avin (el movieClip puede ir animado, pero no con movimiento rectilneo) Coloquele nombre al MovieClip: avin De clic al fotograma1 y digite lo siguiente:
avion._x=50; //Colocando el MovieClip en la coordenada 50,200 avion._y=200; Cree un nuevo fotograma clave en 2 y digite lo siguiente avion._x++; //Movimiento rectilneo en x Cree un nuevo fotograma clave en 3 y digite lo siguiente gotoAndPlay(2); //Bucle
La pelcula es un bucle infinito que empieza en el fotograma 1, posterior el fotograma 2, despus el fotograma 3, pero despus se regresa al fotograma 2, y este se va al 3 y as queda sucesivamente, en lo que este ciclo transcurre la variable avion._x va incrementndose en uno por lo que se ve el efecto del movimiento rectilneo. Ahora bien, se pueden hacer
bucles finitos en las pelculas tambin, simplemente controlando una variable. Veamos el siguiente programa: Programa 9: Transformacin Alfa con Bucle en lnea de tiempo o Cree una pelcula e inserte un MovieClip en forma de estrella, y colquele el nombre al MovieClip de estrella_mc.
En el fotograma1 escriba el siguiente cdigo: var transparencia:Number=100; //Inicializa la transparencia a 100 var ciclo:Number=1; //ciclo 1 es subida de transparencia, ciclo 2 bajada var vez:Number=0; //No de veces que se ejecutar el ciclo de transparencia
//un bucle de la animacin es considerado dos ciclos, ciclo 1 en donde la // propiedad alfa va disminuyendo, y el ciclo 2 donde la propiedad alfa esta en //aumento. if(ciclo==1){ estrella_mc._alpha=transparencia; transparencia-=10; } else{ estrella_mc._alpha=transparencia; transparencia+=10; }
//Para saber el cambio de ciclo, los limites del valor transparencia lo dicen: //si la transparencia es 0, el ciclo 2 empieza, si es 100, es el ciclo 1 y la variable //vez aumenta en 1 if(transparencia==0){ ciclo=2; } if(transparencia==100){ ciclo=1; vez++; } o Cree un fotograma3 clave y escriba lo siguiente: //Si la variable vez es 3 la pelcula se detiene, sino sigue con el ciclo. if(vez==3){ stop(); } else{ gotoAndPlay(2); } Este programa explica cmo se pueden controlar los bucles a travs de la programacin, para este caso, la suma de los ciclos 1 y 2 es de 19 bucles multiplicada por las tres veces que se ejecuta, en total 57 vueltas hizo el programa para que la animacin se llevara a cabo. Sin embargo, existe un inconveniente con este tipo de animaciones: Monopolizan la lnea de tiempo principal y virtualmente se hace difcil animar otra cosa que este en dichos fotogramas, es por ello que la cnones de programacin indican que estas animaciones hay que meterlas en lneas de tiempo secundarias, es decir MovieClips, como se ver ms adelante, este problema se soluciona creando MovieClip en tiempo de ejecucin.
Ejercicio3: Realice un programa en ActionScript que contenga dos controles de introduccin de texto, en uno se escriba una palabra, y en el otro una letra. Cuando se oprima un botn, en un cuadro de texto dinmico se visualice si fue encontrada la letra en la palabra y si esto es as, en qu posicin lo encontr, de lo contrario que coloque que el texto no fue encontrado.
Ejercicio4: Realice un programa que simule un choque de partculas, el choque puede ir en lnea recta para simplificar clculos y tiene que darse una vez.
Cuando se toc el captulo de variables, hubo un tipo de variables que no se mostr en su momento ya que su manejo requiere de ms que
simples instrucciones secuenciales, ahora que ya vimos los bucles estamos listos para manejar arrays. Los arrays no son ms que datos que se componen de una tira de datos, es decir un array es una matriz que puede tener muchos datos, es un objeto y por lo tanto tiene propiedades y mtodos, y por tener multiples datos, es una forma de organizar informacin de una manera eficiente. Las aplicaciones son verstiles y en un tema avanzado se ver como dichos arrays sirven de plataforma genrica para contener base de datos.
Declaracin de Arrays
La sintaxis para declara arrays: var miArray=new Array(); y para asignar valores: var miArray:Array=[valor1, valor2, valor3, , valorN]; para invocar a un elemento del array: trace(miArray[0]); Los elementos van listados desde la posicin 0 hasta la posicin N, esto significa que trabajan muy parecidos a los String, de hecho tcnicamente hablando un tipo de variable es un tipo de array primitivo. var nombres:Array=["juan","pedro","maria"]; trace(nombres[1]); Este cdigo declara un array llamado nombres y le asigna los valores de juan, pedro y mara. La instruccin trace publica a pedro, ya que se encuentra en la posicin 1. Tambin se pueden asignar los valores despus de declarada la variable: var Sueldos=new Array(); //Declaracin de variable array Sueldos[0]=250; //elemento 0 Sueldos[1]=500; //elemento 1 Sueldos[2]=450; //elemento 2 trace(Sueldos[1]); //impresin del elemento 1 Tambin se pueden recorrer los elementos de un array con un simple bucle. var Sueldos=Array=[100,200,300,400] var i:Number; for(i=0;i<Sueldos.length;i++){ trace(Sueldos[i]); }
A los arrays tambin se le pueden asignar nombres a las posiciones, aunque es un proceso ms tardo y complicado, suele ser mas organizado si un array no es demasiado extenso. Para poder asignarle nombres a las posiciones: Array[NombreElemento]=valorExpresion
Por ejemplo: var Datos=new Array(); Datos["Nombre"]="Victor Manuel"; Datos["Edad"]=21; Datos["Ciudad"]="San Salvador"; trace(Datos["Nombre"]);
elemento. slice(star,e nd) Devuelve una matriz nueva que consta de un rango de elementos de la matriz original sin modificar la matriz original.
Programa 10: Utilizacin de un Array Crearemos un programa dinmico que aparentar tener una base de datos en tiempo de ejecucin: o Cree una pelcula Flash que contenga dos cuadros de Introduccin de texto y dos botones de la siguiente forma:
Coloquele a los cuadros de Introduccin de texto, los nombres de Nombre_txt y Edad_txt respectivamente. En el fotograma1 digite el siguiente cdigo:
var MisNombres=new Array(); //Nuevo Array de Nombres var MisEdades=new Array(); //Nuevo Array de Edades var contador=0; //Variable que ira conteniendos cuantos datos son agregados stop(); o En el botn con rotulo INTRODUCIR, digite el siguiente cdigo: on (release) { if (_root.Nombre_txt.text != "" && _root.Edad_txt.text != "") { _root.MisNombres[contador] = _root.Nombre_txt.text; _root.MisEdades[contador] = _root.Edad_txt.text; contador++; _root.Nombre_txt.text = ""; _root.Edad_txt.text = ""; } } Explicando el cdigo
Se crea una condicin IF, preguntando si ambos controles de introduccin de texto no estn vacos, si lo estn el botn no ejecuta nada. Si no estn vacos, se agrega un nuevo dato a los arrays dados por sus respectivos controles de Introduccin de texto. Contador se incrementa en 1 Los controles Nombre_txt y Edad_txt son puestos en blanco nuevamente.
on(release){ var i:Number=0; for(i=0; i<contador; i++){ trace(_root.MisNombres[i]); trace(_root.MisEdades[i]); } } Se realiza un recorrido de los dos arrays, para poder desplegar en salida los datos hasta ahorita insertados.
CAPITULO V: FUNCIONES
Utilizar funciones, es la parte medular de todo programa bien estructurado, las funciones nos permite re-utilizar cdigo y hace los programas mejor diseados, ms elegantes y ms fciles de entender. Y es que bsicamente los eventos (se vern ms adelante) en ActionScript son manejados y manipulados por funciones; Comprender el funcionamiento de las funciones, es estar a las puertas de los objetos y clases en ActionScript y por lo tanto, es estar en los ltimos peldaos del conocimiento del lenguaje.
Terminologa y Sintaxis
Declaracin de una Funcin: La funcin se crea para su posterior invocacin en el programa ActionScript Invocacin de una Funcin: A este proceso se le llama Call y es para utilizar la funcin y que nos devuelva un dato o ninguno. Parmetros de la Funcin: Variables de todo tipo que recibe la funcin para procesarlos y realizar algn procedimiento particular, los parmetros se pueden pasar por valor y por referencia. Para poder Declarar una funcin, es decir, crearla, se utiliza la siguiente sintaxis: function NombreFuncion(parametro1, parametro2, parametroN){ Sentencias de la funcin; Return(valorTipo); } Esta sintaxis se explica a continuacin function: Instruccin que indica que se va a crear una funcin. NombreFuncion: Nombre de la funcin que le asignamos. parmetros: Son variables (de cualquier tipo) que son pasados a
la funcin para su posterior procesamiento. return: es una instruccin ActionScript que indica que la funcin va retornar algo, si est vaca, no retorna nada, si contiene un valor, devuelve el valor que puede ser de cualquier tipo de dato
Por ejemplo: var i:Number=0 //Declaracin de una variable i //Se crea una funcin sencilla que lo nico que hace es imprimir un mensaje function Impresion(){ trace("Mi Primera Funcin"); } //En el siguiente bucle, la funcin se invoca 3 veces for(i=0;i<3;i++){ Impresion(); //Se invoca a la funcin }
Uso de Parmetros
El uso de parmetros es fundamental en el uso de las funciones, los parmetros son copias internas de datos que se le pasan a la funcin y dicha funcin utiliza estas copias para trabajar con ellas. var mensaje:String="Hola a todos"; function ImprimirMensaje(msj){ trace("El mensaje pasado es: "+msj); } ImprimirMensaje(mensaje); ImprimirMensaje("Carlos"); En este cdigo, se declara la funcin ImprimirMensaje que recibe un parametro llamado msj, cuando la funcin es invocada, se le pasa una variable, en el caso de la primera invocacin, se le pasa la variable mensaje, y en el segundo se le pasa el String Carlos var Num1:Number=3; function ImprimeCuadrado(numero){ trace(numero*numero); } ImprimeCuadrado(Num1); Este cdigo declara una funcin llamada ImprimeCuadrado que tiene un parmetro llamado numero e imprime el cuadrado del nmero. En la lnea final del cdigo se Imprime el cuadrado de la variable pasada a la funcin Num1. var es:Boolean=true; function ImprimeV(escierto){ if(escierto){ trace("el parametro es verdadero");
} else{ trace("el parametro no era verdadero"); } } ImprimeV(es); ImprimeV(5==6); El cdigo es interesante en el uso de un parmetro booleano, se declara una funcin ImprimeV que tiene un parmetro que se trabajar como booleano, si el booleano es true, se imprime el parmetro es verdadero si no se imprime el parmetro no era verdadero, note las ltimas dos lneas: en la primera se pasa la variable es que es verdadera y en la segunda se pasa una condicin que es false; pruebe la ejecucin de este programa. El siguiente programa detalla que no solo tipos de valor bsico se pueden pasar como parmetros. Programa 11: Parmetros de MovieClip o Cree una pelcula que contenga tres MovieClips y asgnele los nombres de movie1, movie2 y movie3 respectivamente.
//Declaracion de una funcin que tiene como parmetros un MovieClip, un valor alfa y // un Tamano que aumentara la escala. function EstadoMovie(Clip, Alfa, Tamano){ Clip._alpha=Alfa; Clip._xscale+=Tamano; Clip._yscale+=Tamano; } //se invoca la funcin y se pasa el parmetro movie1 y valores para alfa y tamano EstadoMovie(movie1, 30, 100); //se invoca la funcin y se pasa el parmetro movie2 y valor alfa 60 y tamao=50 EstadoMovie(movie2, 60, 50); EstadoMovie(movie3, 100, 0); stop(); o Pruebe el Resultado:
Este se podra decir que es un ejemplo del potencial que tiene el ActionScript, la funcin puede recibir como parmetro un objeto y trabajar sobre dicho objeto, como la funcin es cdigo re-utilizable, se puede utilizar con los objetos que se quiera.
Declaracin return
Hasta el momento se han visto funciones que no retornan valores, sin embargo la funcionalidad de las funciones (valga la redundancia) se extiende si estas funciones retornaran valores. La declaracin return hace que la funcin devuelva al cdigo que lo invoc un valor, este puede ser de cualquier tipo. Ejemplo: var numletra1:String, numletra2:String; function ConvierteLetra(numero){ var letra:String; switch(numero){ case 0: letra="cero";break; case 1: letra="uno";break; case 2: letra="dos";break; case 3: letra="tres";break; case 4: letra="cuatro";break; case 5: letra="cinco";break; case 6: letra="seis";break; case 7: letra="siete";break; case 8: letra="ocho";break; case 9: letra="nueve";break; default: letra="No definido";break; } return(letra); } numletra1=ConvierteLetra(5); numletra2=ConvierteLetra(2); trace(numletra1); trace(numletra2); Analizando el cdigo anterior, se declara una funcin con nombre ConvierteLetra y tiene como parmetro a numero, las sentencias de la funcin realizan lo siguiente: Si numero es un numero entre 0 y 9 la variable letra (declarada dentro de la funcin) toma el valor String del nmero respectivo. La instruccin return(letra) hace que la funcin
devuelva un valor de tipo String (porque letra lo es). Y eso queda demostrado cuando a las variables String numLetra1 y numLetra2 se le asigna el valor de la funcin que devuelve con sus parmetros respectivos (5 y 2). Otro ejemplo: var num1:Number=2, num2:Number=6; function cuadrado(numero){ return(numero*numero); } trace("esta variable es "+num1+" y su cuadrado es: "+cuadrado(num1)); trace("esta variable es "+num2+" y su cuadrado es: "+cuadrado(num2)); En el cdigo anterior, se utiliza la el return de la funcin, pero no para asignrselo a una variable sino mas bien para utilizarlo en una sentencia.
Programa 12: Uso de Return o Cree una pelcula en Flash que contenga dos cuadros de Introduccin de texto, un botn y un cuadro de Texto Dinmico.
A los cuadros de Introduccin de texto asgnele los nombres de horas_txt y pagoh_txt respectivamente. Al cuadro de texto dinmico asgnele el nombre de ex_txt En el fotograma1 digite el siguiente cdigo:
o o
expresion+=" pagar "+Number(horas)*Number(pagoh)+" dolares"; return(expresion); } stop(); o En el botn digitar el siguiente cdigo: on(release){ _root.ex_txt.text=_root.GenerarExpresion(_root.horas_txt.text, _root.pagoh_txt.text); } o Pruebe la pelcula. Note en este programa, como se invoca la funcin desde el botn, siempre anteponindole el nombre del objeto madre en donde se cre.
Aqu se obliga a la funcin a retornar un TipoDato, es decir, la instruccin return debe contener un dato igual al tipo de Dato que la funcin fue declarada a retornar. Ejemplo: function Cuadrado(numero:Number):Number Aqu la funcin Cuadrado recibe como parmetro un numero y deber retornar un tipo de datos Number. function esMayor(num1:Number):Boolean La funcin esMayor recibe como parmetro un nmero y tiene que devolver al cdigo que la invoca un tipo de dato booleano. Este tipo de instruccin hace que el cdigo sea ms estricto y por lo tanto limita los errores lgicos que se puedan dar en un programa ActionScript. var num1:Number=2; //Declarando variables var cadena:String="mensaje"; //la funcin cuadrado tiene que devolver un nmero function cuadrado(n:Number):Number{ return(n*n); } num1=cuadrado(num1); //asignacin del cuadrado de num1 a num1 cadena=cuadrado(num1); //Error!, intentando dar un numero a la variable cadena El cdigo creara un error en la ltima lnea ya que se le est tratando de dar un tipo de dato nmero a un variable String (cadena). Esto sirve tambin para comprender un aspecto importante de las funciones, las variables o valores que se le pasan a los parmetros de una funcin se pasan usualmente por valor cuando estos son tipos de datos simples, es decir, cuando se pasa la variable num1 a la funcin cuadrado esta no se modifica dentro de la funcin, lo que se ha hecho es que se le pasa un valor copiado y este valor copiado (n) es el que trabaja la funcin; por supuesto, despus se le asigna el valor retornado nuevamente a num1, pero eso es otra cosa. var Renta:Number=0, Sueldo:Number=200; function calculoRenta(s:Number):Number{ s=s+10; return(s*0.1); } Renta=calculoRenta(Sueldo); En este cdigo la variable Sueldo no es afectada al pasarla a la funcin, Sueldo sigue valiendo 200, aunque dentro de la funcin se le aumentaron 10 unidades. Esto significa que a quien se le aumento 10 unidades es al parmetro s que es una copia de Sueldo, pero no Sueldo propiamente dicho. A este fenmeno se le conoce como paso por valor
Pero como se haba dicho anterior, esto funciona con Tipos de datos simples, es decir con Nmeros, String y Booleanos. Ahora consideremos el paso de un Array: //Declaracin de variables var Paises=new Array(); var i:Number=0; //Asignacin de valores a la matriz Paises[0]="El Salvador"; Paises[1]="Mexico"; Paises[2]="Colombia"; //Imprime en el panel de Salida los diferentes elementos del array for(i=0;i<Paises.length;i++){ trace(Paises[i]); } // Se declara una funcin de borrado que recibe como parmetro un array function Borrado(vector:Array){ var i:Number; for(i=0;i<vector.length;i++){ vector[i]="Nada"; } } //Se le pasa el Array Paises a la funcion Borrado(Paises); //Se vuelve a imprimir en el panel de Salida for(i=0;i<Paises.length;i++){ trace(Paises[i]); } Y el resultado en el panel de Salida: El Salvador Mexico Colombia Nada Nada Nada Aqu ha ocurrido un fenmeno interesante, el array fue pasado a la funcin, y aunque debera de entenderse que fue la copia (vector) la que fue modificada, tambin se modific la original, es decir Paises, esto se debe a que los Arrays, MovieClips,etc, en fin todos los tipos de datos complejos (Objetos) cuando son pasados a una funcin no se les pasa por valor, sino: por referencia. El paso por referencia es que no se pasa el valor de la variable sino su ubicacin en memoria, el pasar un variable por su ubicacin de memoria significa que la variable va a ser modificada a todo nivel. El paso por referencia debe ser un proceso que debe de tenerse mucho tacto al utilizar, una forma de evadirlo podra ser crear otra copia dentro de la
funcin (es decir, una copia de la copia) y trabajar esta ltima si nuestra intencin no es modificar la original. Cuando se desarrolle el tema de Clases, se podr ver de una vez por todas, que los objetos son direcciones de memoria que alojan variables de todo tipo.
Hoy en da los eventos son controlados por funciones propietarias, y esto hace aparentemente el cdigo ms complejo, aunque tambin ms ordenado. Sin embargo Existen tres eventos primarios (primigenios) que no necesitan funciones y que estn presente desde los albores de la programacin ActionScript, para poder comprender el uso de funciones propietarias hacia los eventos, se debe comprender primero el uso de estos eventos. Pero antes que nada:Qu es un evento? Evento: es un trozo de cdigo ActionScript que se ejecuta cuando pasa algo en la pelcula, este puede activarse por eventos del usuario o eventos inducidos por el programa. En la vida cotidiana, nuestro mundo est plagado de eventos, si ocurre el evento de pinchar un Globo, automticamente propiedades de ese globo cambian, y el globo se desinfla (mtodo). Aunque el apartado de Objetos con sus propiedades, mtodos y Eventos se vern en un futuro, es imposible tocar el potencial de ActionScript sin poder saborear un poco los eventos antes.
Eventos Primigenios
Para los objetos bsicos en Flash, son tres: On Evento cuando se hace algo sobre el botn onClipEvent Evento cuando algo pasa sobre el movieClip onEnterFrame Evento cuando el cabezal toca un fotograma en lnea de tiempo principal. Realmente el onEnterFrame de la lnea de tiempo principal es un objeto con funcin literal como se ver ms adelante, pero por el momento no necesitamos complicarnos con dichos trminos.
Evento on El cdigo de este evento debe ir en un botn y su sintaxis es la siguiente: on(suceso){ instrucciones; } Donde suceso es el tipo de accin que se realiza sobre el botn, la siguiente tabla muestra algunos de los sucesos ms importantes: release press Se presiona el botn y suelta. Se presiona el botn
El puntero del ratn se mueve sobre el botn El puntero del ratn se mueve afuera del botn Se presiona una tecla y se especifica qu tecla es (Key)
La forma de invocar otros objetos dentro del evento es la misma que se ha venido utilizando, sin embargo, es hora de introducir algo nuevo: Referencias Absolutas y relativas Ya sea dentro de una funcin o dentro de un evento, la forma de llamar de objetos, hasta el momento se han utilizado referencias absolutas veamos ambos conceptos: Referencia Absoluta: es el nombre completo de un objeto, si dicho objeto est dentro de otros objetos, se le anteponen los objetos al cual pertenecen desde su objeto madre. _root.ObjetoPadre.Objeto,propiedad Referencia Relativa: es el nombre de un objeto relativo al objeto en donde se est invocando, si dicho objeto est en su mismo cdigo, se le da el apodo de this. Si se quiere invocar un objeto que est fuera de l, pero est en el objetoMadre al cual pertenece se utiliza la sentencia parent this._parent.Objeto.propiedad Consideremos el siguiente ejercicio:
Programa 13: Utilizacin del evento on y referencias absultas y relativas o Cree una pelcula Flash con un botn y un MovieClip, al MovieClip colquele el nombre de bomba_mc.
on(keyPress "<Down>"){ _root.bomba_mc._y+=1; //invocando al MovieClip y aumentando su posicionY } o En el fotograma1 digite lo siguiente: stop(); o Pruebe la pelcula. El evento solo se activa cuando se presiona la tecla cursora abajo y cada vez que se presiona el MovieClip aumenta su coordenada en Y, lo que dar la sensacin de ir cayendo. Note la referencia absoluta para invocar el nombre del MovieClip en el evento del botn. Se puede llamar al MovieClip con su referencia relativa de la siguiente forma: on(keyPress "<Down>"){ this.bomba_mc._y+=1; } Aqu el objeto this es el objeto madre, es decir, root.
Pueden llegarse casos en que puede resultar un problema estar llamando referencias relativas o absolutas a un objeto, para ello existe un
botn que llama los objetos dibujados en la pelcula y se puede elegir entre llamarlo por cualquier forma:
Y en modalidad diseo se podr escoger la ruta respectiva ya sea Relativa o Absoluta. Evento onClipEvent MovieClip tiene el evento onClipEvent, este se activa cuando un suceso ocurre sobre el MovieClip, su sintaxis es la siguiente: onClipEvent(sucesos) { instrucciones; } Y los sucesos que pueden darse son: Load unLoad enterFrame MouseDow n MouseMove Se ejecuta cuando el MovieClip entra en el escenario principal. Se ejecuta cuando el MoviClip deja de estar en el escenario principal Se ejecuta cada vez que el MovieClip entra en un fotograma de la lnea de tiempo principal. Se ejecuta cuando se presiona el clic izquierdo del raton.
Se ejecuta cuando se mueve el puntero del ratn sobre el MovieClip Para este nivel el ms utilizado es el suceso enterFrame, ejemplo: onClipEvent(enterframe){ this._x+=1; } Este cdigo hace que el MovieClip se mueva en el eje x
onClipEvent(mousemove){ this._x+=1; } Este otro cdigo hace que el MovieClip se mueva en el eje x siempre y cuando se est moviendo el puntero de Mouse.
Programa14: Uso del evento onClipEvent El programa que a continuacin se detalla, hace un efecto de rebote de una bola dentro de un rectngulo definido, es importante hacer notar que este efecto se puede lograr con otras herramientas de cdigo, pero nuestra intencin es demostrar cmo se usa el evento onClipEvent. Convenciones sobre el efecto rebote: El programar un efecto rebote conlleva desarrollar cierta lgica espacial, en el sentido estricto, cuando un objeto rebota invierte su direccin, la direccin usualmente lleva un ngulo, pero para este caso el ngulo se estacionar en 45, otra cosa importante es el hecho que si invierte su direccin significa que cuando llegue al borde, si este es vertical, entonces la coordenada x que iba aumentando, disminuir o viceversa; la misma lgica se aplica al rebote horizontal pero a la coordenada y. o Dibuje un rectngulo tal y como se muestra a continuacin, pero teniendo en cuenta que las esquinas deben de tener las coordenada siguientes: Esquina Superior izquierda: Esquina Superior derecha: 50,50 450,50
Esto significa que el cuadrante debe tener un ancho de 400 pixeles y un alto de 250, y su posicin (50,50).
Ahora cree un MovieClip en forma de bola y que tenga un ancho de 20 pixeles y un alto de 20 pixeles tambin, y colquelo en la coordenada 100,100
var incrementox:Number=1; //Avance en X positivo var incrementoy:Number=1; //Avance en Y positivo stop(); o Ahora de clic en el MovieClip y digite el siguiente cdigo:
onClipEvent(enterFrame){ //la pelota se mueve: this._x+=_root.incrementox; this._y+=_root.incrementoy; // Si la bola llega al borde derecho el valor del incremento x es positivo if(this._x==50){ _root.incrementox=1;
} // Si la bola llega al borde izquierdo el valor del incremento x es negativo // el borde esta en 450, pero por el dimetro del baln (20) se resta. if(this._x==430){ _root.incrementox=-1; } //Si la bolla llega al borde superior el valor del incremento y es positivo if(this._y==50){ _root.incrementoy=1; } //si la bola llega al borde inferior el valor del incremento y es negativo //es 280 porque se resta el borde inferior(300) y el alto del baln 20. if(this._y==280){ _root.incrementoy=-1; } } Analice el cdigo. El enterFrame se ver con las funciones literales.
Lo que basta es saber qu eventos son los que tiene a su disposicin los objetos. Estamos listos para entrar al potencial del ActionScript
Propiedades
_alpha _currentframe _framesloaded _height _width _visible _rotation _xmouse _ymouse createTextField duplicateMovieC lip createEmptyMov ieClip getBytesLoaded getBytesTotal Play Stop onEnterFrame La transparencia del objeto Numero de fotograma actual, es decir, en donde est el cabeza. Cantidad de fotogramas cargados. Altura del objeto Anchura del objeto Propiedad booleana que establece si est visible o no el objeto. Valor en grados de rotacin del objeto. Posicin x del puntero del ratn Posicin y del puntero del ratn
Mtodos
Crea un campo de texto Duplica un MovieClip ya creado Crea un MovieClip vaco Devuelve la cantidad de Bytes cargados Devuelve la cantidad total de Bytes que pesa la pelcula Pone en marcha el cabezal Detiene el cabezal
Eventos
Cuando se entra a un fotograma a la velocidad de la pelcula onMouseDown Se da clic con el ratn onMouseMove Se mueve el puntero del ratn onPress Se presiona sobre el objeto onRelease Se suelta el ratn sobre el objeto onRollOut Se mueve afuera el puntero del ratn del objeto onRollOver Se mueve el ratn sobre el objeto onKeyDown Se presiona una tecla Ahora existen propiedades y mtodos para aplicarlos a los eventos con funciones literales.
Programa 15: Funcin literal con animacin alfa aplicados a MovieClips Aunque este ejercicio puede hacerse con el evento primigenio onClipEvent(enterFrame), resulta ms eficiente con una funcin literal. La ventaja radica en que se realiza el cdigo una tan sola vez y posteriormente se le aplica la funcin literal a cada evento de los MovieClips. o Cree una pelcula con tres MovieClips insertados, asgnele los nombres de clip1_mc, clip2_mc y clip3_mc respectivamente.
//funcin literal que hace que un objeto this reduzca su alfa en 5. function AnimarAlfa(){ this._alpha-=5; } //se le asigna la funcin AnimarAlfa a los eventos onEnterFrame de cada MovieClip clip1_mc.onEnterFrame=AnimarAlfa; clip2_mc.onEnterFrame=AnimarAlfa; clip3_mc.onEnterFrame=AnimarAlfa; stop(); o Pruebe la pelcula. Ay puntos bien importantes a mencionar antes de continuar: Este cdigo pudo haberse hecho con el evento primigenio onClipEvent, pero el cdigo de la funcin AnimarAlfa se tuvo que haber colocado en cada MovieClip, es decir, tres veces.
Al evento onEnterFrame (que en este cdigo se utiliza como si fuera propiedad) se le asigna la funcin AnimarAlfa. this se utiliza porque la funcin AnimarAlfa no sabr a quien o quienes va servir, por lo tanto se limita a decir: Reduzco el alfa en 5 del objeto que me pasen.
Programa 16: Animacin de un objeto de Texto Dinmico creado en ejecucin Para poder realizar este programa se createTextField y la propiedad _currentframe. Sintaxis de la funcin createTextField createTextField(Nombre:String, Profundidad:Number, x:Number, y:Number, width:Number, height:Number) : TextField Nombre: Es el nombre del cuadro de texto creado por programacin Profundidad: Es un numero identificador nico para el cuadro de texto x: coordenada x de posicin del cuadro de texto y: coordenada y de posicin del cuadro de texto width: ancho en pixeles del cuadro de texto height: alto en pixeles del cuadro de texto utilizar la funcin
//Crea un campo de texto en la lnea de tiempo principal _root.createTextField("foto_txt",1,100,100,200,100); //Funcin literal asignada al evento onEnterFrame de la lnea de tiempo principal _root.onEnterFrame=function(){ _root.foto_txt.text=_root._currentframe; } La primera lnea de instruccin crea un campo de texto con nombre foto_txt, le asigna el cdigo 1 y lo coloca en la posicin 100,100 en la pelcula, dndole un ancho de 200 pixeles y un alto de 100 pixeles. o De clic en el fotograma 50 y presione F5, para crear una animacin de 50 fotogramas, pero el nico fotograma clave en
Programa 17: Uso de duplicateMovieClip y _root Para este programa se utilizar el mtodo duplcateMovieClip y su sintaxis es la siguiente: duplicateMovieClip(objetoOrigen:MovieClip, nuevoNombre:String, profundidad:Number); objetoOrigen: Es el MovieClip que va a ser duplicado. nuevoNombre: Nombre del MovieClip duplicado. profundidad: igual que la creacin de los controles de texto, es un nmero identificador del MovieClip.
Cuando se crea un MovieClip o cualquier otro objeto en _root, estos objetos vienen a formar parte de un Array Madre, que puede ser invocado como los arrays con nombres en sus posiciones, que se crearon en el capitulo de arrays que tocamos. Es decir, solo como ejemplo: //Crea un MovieClip duplicado _root.duplicateMovieClip(estrella_mc, "estrella1", 1); //al MovieClip duplicado se le asigna 100 a su propiedad _x _root["estrella1"]._x=100; Teniendo en cuenta estos tips, empecemos con el programa:
o Las dimensiones del MovieClip debe ser de 100x100 y su posicin en la coordenada 100,100. o De clic en el fotograma1 y digite lo siguiente: // Declaracin de una funcin que hace rotar el objeto presente function rotar(){ this._rotation+=5; } //Crea dos nuevos MovieClips basados en estrella_mc duplicateMovieClip(estrella_mc, "estrella1", 1); duplicateMovieClip(estrella_mc, "estrella2", 2); //A los dos nuevos MovieClips se les asigna sus nuevas coordenadas x _root["estrella1"]._x=250; _root["estrella2"]._x=400; //se les asigna la funcin al evento onEnterFrame de cada MovieClips _root["estrella_mc"].onEnterFrame=rotar; _root["estrella1"].onEnterFrame=rotar; _root["estrella2"].onEnterFrame=rotar; o Pruebe la pelcula. Este cdigo puede ser escrito de otra forma: function rotar(){ this._rotation+=5; } duplicateMovieClip(estrella_mc, "estrella1", 1); duplicateMovieClip(estrella_mc, "estrella2", 2);
estrella1._x=250; estrella2._x=400; estrella_mc.onEnterFrame=rotar; estrella1.onEnterFrame=rotar; estrella2.onEnterFrame=rotar; y funciona igual, pero el hecho que se puede invocar en forma de arrays en las sentencias nos abre las puertas para meter dichas declaraciones en bucles o condiciones, tal y como vemos en el siguiente programa. Programa 18: Uso de duplicateMovieClip, _root y eventos Este programa realmente no insertar ningn concepto nuevo, pero si dar una muestra de lo que es capaz ActionScript. o Dibuje un escenario tal y como sigue:
o Simular ser un can y un disparo, el disparo (osea la estrella), convierta en MovieClip y coloque el nombre fuego_mc. o A la capa colquele el nombre fondo o Cree una nueva capa, colquele el nombre bala, y ah dibuje exactamente delante de la punta del caon un MovieClip en forma de bala, colquele al MovieClip el nombre de bala_mc; mueva la capa abajo para que la bala se vea debajo del MovieClip fuego_mc tal y como muestra la figura siguiente
o Cree una nueva Capa y colquele el nombre script e inserte fotogramas claves vacos hasta el 3.
o En el fotograma1 de la capa script digite el siguiente cdigo: //Crea dos variables, una ser activadisparo que activara una animacin de disparo //y otra que llevara el numero de disparos hechos con el caon var activadisparo:Number=0; var numerodisparo:Number=0; //Se colocan los MovieClips bala_mc y fuego_mc invisibles bala_mc._visible=false; fuego_mc._visible=false; o En el fotograma2 de la capa script digite el siguiente cdigo: //se declara una funcin llamada disparon que hara que los duplicados de bala_mc se muevan //10 posiciones cada vez que entren en un fotograma function disparo(){ this._x+=10; } // Se declara la funcin literal sin nombre- para el evento onEnterFrame del _root onEnterFrame=function(){ fuego_mc._visible=false; //se coloca fuego_mc nuevamente invisible //si la variable activadisparo es 1 entonces se crea un duplicado de pelcula bala_mc if(activadisparo==1){ _root.numerodisparo++; //el contador numerodisparo aumenta en 1 fuego_mc._visible=true; //el fuego se pone visible un fotograma
//se crea el duplicado de pelcula bala_mc y se le asigna el nombre de //bala+el numero de disparo, bala1, bala2, etc duplicateMovieClip(bala_mc, "bala"+_root.numerodisparo, _root.numerodisparo); //se le asigna a la nueva bala la funcin disparo para que se mueva al frente _root["bala"+_root.numerodisparo].onEnterFrame= disparo; //se quita la activacin del disparo a 0 nuevamente activadisparo=0; } //fin del condicional if } o En el fotograma3 de la capa script digite lo siguiente: gotoAndPlay(2); //se hace un bucle y la pelcula correra entre el fotograma2 y 3 o Ahora solo falta activar el disparo (activadisparo) a travs de un evento, para esto se har que cuando se presione la tecla espaciadora, el can dispare y esto se realiza digitando lo siguiente en el botn: on(keyPress "<Space>"){ _root.activadisparo=1; } o Cambie la velocidad de la pelcula a 100 fotogramas por segundo para que se vea ms espectacular el efecto. o Pruebe la pelcula
Objeto Key
Los mtodos y propiedades se pueden utilizar sin declarar variables previamente. Se usan frecuentemente para crear una interfaz que un usuario pueda controlar con un teclado estndar. Las propiedades de la clase Key son constantes que representan las teclas ms utilizadas en las aplicaciones de control, como las teclas de flecha AvPg y RePg. El objeto Key almacena de alguna forma ya sea cdigo ascii, nombre, etc- la tecla que est siendo presionada; tambin tiene instrucciones especficas para las teclas ms utilizadas. Propiedades: BACKSPACE CONTROL El valor de cdigo de tecla asociado a la tecla Retroceso (8). El valor de cdigo de tecla asociado a la tecla
DOWN END ENTER ESCAPE HOME INSERT LEFT RIGHT SHIFT SPACE UP:Number Mtodos: getAscii() isDown(codigo)
Control (17). El valor de cdigo de tecla asociado a la tecla de flecha abajo (40). El valor de cdigo de tecla asociado a la tecla Fin (35). El valor de cdigo de tecla asociado a la tecla Intro (13). El valor de cdigo de tecla asociado a la tecla Esc (27). El valor de cdigo de tecla asociado a la tecla Inicio (36). El valor de cdigo de tecla asociado a la tecla Insert (45). El valor de cdigo de tecla asociado a la tecla de flecha izquierda (37). El valor de cdigo de tecla asociado a la tecla de flecha derecha (39). El valor de cdigo de tecla asociado a la tecla Mays (16). El valor de cdigo de tecla asociado a la tecla Barra espaciadora (32). El valor de cdigo de tecla asociado a la tecla de flecha arriba (38). Devuelve el cdigo ASCII de la ltima tecla presionada o soltada. Devuelve true si est presionada la tecla especificada en keycode; false en caso contrario.
Eventos: onKeyDown onKeyUp Se notifica cuando se presiona una tecla. Se notifica cuando se suelta una tecla.
Sin embargo, el objeto Key por ser un objeto primario no puede orientar sus eventos hacia un solo objeto, es decir, tiene que poner su disponibilidad para el objeto o control que desee, esto se hace con una mtodo de l en donde se coloca el objeto que lo va invocar: Key.addListener(Objeto); Con esta lnea de cdigo se le est diciendo al compilador que el objeto podr utilizar los eventos del objeto Key. Ejemplos de cdigos utilizando el Objeto Key. Key.addListener(_root); //Se le da permiso a _root utilizar los eventos de Key _root.onKeyDown= function(){ trace("hola"); } Cada vez que se presiona cualquier tecla, el panel de salida imprime hola.
Key.addListener(_root); _root.onKeyDown= function(){ trace(Key.getAscii()); } Cada vez que se presiona cualquier tecla, el panel de salida imprime su cdigo asccii. Key.addListener(_root); _root.onKeyDown= function(){ //Si una tecla es presionada, en x+ if(Key.isDown(Key.RIGHT)){ movie_mc._x++; } //Si una tecla es presionada, clip en xif(Key.isDown(Key.LEFT)){ movie_mc._x--; } //Si una tecla es presionada, y+ if(Key.isDown(Key.DOWN)){ movie_mc._y++; } //Si una tecla es presionada, en yif(Key.isDown(Key.UP)){ movie_mc._y--; } } Cdigo que mueve un MovieClip utilizando las teclas cursoras.
Objeto Math
A igual que Key es un objeto de nivel superior y no necesita declaracin para poder ocupar sus propiedades y mtodos. A continuacin una tabla con algunos de sus propiedades y mtodos: E PI abs(x) cos(x) floor(x ) log(x) Max(x ,y) min(x, Propiedades nmero e. Constante pi 3,141592653589793. Mtodos Devuelve valor absoluto de x. Calcula y devuelve el coseno del ngulo especificado en radianes. Devuelve el valor redondeado de x al nivel inferior. Devuelve el logaritmo de x. Calcula x e y y devuelve el valor mayor. Calcula x e y y devuelve el valor ms pequeo.
Calcula y devuelve x elevado a la potencia de y. Devuelve un nmero aleatorio, entre 0 y 1. Devuelve el valor redondeado de x al nivel superior. Calcula y devuelve la raz cuadrada de x.
Usualmente las funciones matemticas dan un alto poder a las animaciones que no son rectilneas Programa 19: Grafica de una parbola con Math. o Cree un nuevo documento de Flash e inserte un MovieClip, y colquele el nombre de bola_mc y colquela en la coordenada 0,0.
o De clic en el fotograma1 y digite el siguiente cdigo: // Funcin literal para el evento onEnterFrame del MovieClip bola_mc.onEnterFrame=function(){ this._x++; //aumenta la coordenada x en 1 this._y=Math.pow(0.2*(this._x-200),2)+100; //Calcula la coordenada y de la parabola } La ecuacin se induce a raz de la forma ms compleja de la ecuacin de parbolas: y=a(x-d)2+z
Donde: a, es el factor de curvatura (o foco) x, es la coordenada x d, es el desplazamiento horizontal de la parbola z, es el desplazamiento vertical Tome en cuenta que nos encontramos en el plano1 del eje cartesiano, ya que las coordenadas del lienzo en flash es: x (0,0)
Programa 20: Grafica de una parbola con Math. o Cree una pelcula Flash y el lienzo configrelo en 500x400 o Inserte un MovieClip, colquele el nombre de estrella_mc o En el fotograma1 digite lo siguiente: var nEstrella:Number=1; o Cree un fotograma clave en 2 y digite lo siguiente: //Duplica la pelcula y le asigna el nombre estrella+ la variable nEstrella duplicateMovieClip(estrella_mc,"estrella"+nEstrella,nEstrella); _root["estrella"+nEstrella]._x=Math.random()*500; //variable aleatoria en x _root["estrella"+nEstrella]._y=Math.random()*400; //variable aleatoria en y nEstrella++; //Estrella aumenta en 1 o Cree otro fotograma calve en 10 y digite lo siguiente: gotoAndPlay(2); o Pruebe la pelcula Este ultimo programa muestra el uso de la funcin random del objeto Math, con la instruccin _root["estrella"+nEstrella]._x=Math.random()*500
Lo que se hace es que al nuevo MovieClip se le aplica en la coordenada x, un valor aleatorio entre 0 y 499 que es el ancho del lienzo, la misma lgica se aplica a la coordenada y.
Objeto _Global
Muchas veces es necesario declarar variables, funciones y dems objetos en Flash, que no sea tan complicado llamarlas desde donde fueron declaradas, es decir, que no importa su ruta absoluta o relativa puedan ser invocadas con facilidad. Aunque este fenmeno tiende a crear mala programacin, siempre y cuando su uso sea limitado, puede resultar sano utilizarlas. Para poder hacer esto, se declara el objeto como una propiedad del objeto _global de la siguiente forma: _global.nObjeto; Para poderlas invocar se ocupan anteponiendo el objeto _global o simplemente el nombre del objeto. Ejemplos: _global.numero=1; Declara una variable global y le asigna el valor de 1 _global.mensaje=function(){ trace("funcion global"); } Declara una funcin global.
Objeto Date
Realmente este objeto no es uno de nivel superior, sin embargo, es una clase primordial de Flash y siendo un tipo de dato se maneja como tal. Este tipo de dato se utiliza para manejar el reloj del sistema y tiene diferentes mtodos para manejarlos. getDate( ) getDay() getHours () getMinut es() getMont h() getSecon ds() getYear( ) toString( ) Devuelve el da del mes (un entero del 1 al 31) del objeto Date especificado de acuerdo con la hora local. Devuelve el da de la semana (0 para domingo, 1 para lunes, etc.) del objeto Date especificado de acuerdo con la hora local. Devuelve la hora (un entero del 0 al 23) del objeto Date especificado de acuerdo con la hora local. Devuelve los minutos (un entero del 0 al 59) del objeto Date especificado de acuerdo con la hora local. Devuelve el mes (0 para enero, 1 para febrero, etc.) del objeto Date especificado de acuerdo con la hora local. Devuelve los segundos (un entero del 0 al 59) del objeto Date especificado de acuerdo con la hora local. Devuelve el ao del objeto Date especificado de acuerdo con la hora local. Devuelve un valor de cadena para el objeto de fecha especificado en un formato legible.
Para declara una variable de tipo de Date se hace igual que la de un array: var Variable:Date=new Date(); Algunos ejemplos de cdigo: var fecha:Date=new Date(); trace(fecha); Declara una variable fecha e imprime la fecha actual. var fecha:Date=new Date(2007,3,1); trace(fecha); Declara una variable fecha, se le da el valor del 1 de marzo del 2007. var fechaV:Date=new Date(2007,1,1); //fechaV=1 de Enero de 2007 var fechaA:Date=new Date(2007,3,15); //fechaA=15 de Marzo de 2007 var dias:Number; dias=fechaA-fechaV; //dias igual en milisengundos de fechaA-fechaV dias=dias/1000;//conversion a segundos dias=dias/60; //conversion a minutos dias=dias/60; //conversion a horas dias=dias/24; //conversion a dias //Imprime la cantidad de dias que han transcurrido desde el 1 de Enero de 2007 al //15 de marzo de 2007 trace(dias); Interesante cdigo que demuestra cmo se pueden operar sobre fechas, inclusive se puede restar (o sumar) y el resultado se deposita en una variable que almacena la cantidad de milisegundos de diferencia entre una fecha y la otra.
Objeto Mouse
El objeto Mouse, es un objeto primario, que simplemente tiene cuatro mtodos aunque dos de ellos quedan para un nivel superior de ActionScript. Este objeto tiene la instruccin de operar sobre el puntero del Mouse de la pelcula, aunque existen propiedades mas especializadas, el objeto primario Mouse se utiliza para ocultar el cursor y cambiar algunas de sus propiedades tambin. hide() show() Devuelve el da del mes (un entero del 1 al 31) del objeto Date especificado de acuerdo con la hora local. Devuelve el da de la semana (0 para domingo, 1 para lunes, etc.) del objeto Date especificado de acuerdo con la hora local.
La instruccin: Mouse.hide(); Es un simple cdigo que lo que hace es ocultar el puntero del Mouse. Programa 21: Movimiento de un MovieClip con Mouse. Este es un clsico de animacin, no introduce nuevos conceptos salvo el mtodo hide() del Mouse. o Cree una pelcula Flash e inserte un MovieClip y colquele el nombre de clip_mc
o De clic el fotograma1 y digite el siguiente cdigo: clip_mc.onEnterFrame=function(){ Mouse.hide(); this._x=_root._xmouse; this._y=_root._ymouse; } o Pruebe la pelcula.
Ejercicio2: Realice un programa en ActionScript que exista un MovieClip redondo y cambie de forma de la siguiente manera: Al presionar cursora arriba: el objeto crece verticalmente Al presionar verticalmente Al presionar verticalmente cursora abajo: el objeto disminuye
cursora
derecha:
el
objeto
crece
Al presionar cursora izquierda: el objeto disminuye verticalmente. Al mencionar sobre crecer o disminuir, recuerde que se refiere a las escalas. Ejercicio3: Cree un programa en ActionScript que tenga un MovieClip en forma de nube y cree duplicados de diferentes tamaos, que aparezcan en orden aleatorio y que se muevan sobre el escenario.
CONCLUSIONES
Hemos visto como el ActionScript ofrece un potencial como cualquier otro lenguaje de programacin. ActionScript crea variables y poco a poco se complic la cosa, viendo como las variables se transformaban en variables ms complejas como arrays, y como tambin estos sirvieron de introduccin a los objetos, dichos objetos tienen propiedades (que son variables tambin), mtodos (que son funciones) y eventos. Los mtodos por ejemplo existen definidos por el usuario (cuando se declararon funciones) y otros son literales hacia los eventos. Finalmente se conocieron los objetos races o primarios como _root, Mouse, _global, etc. El hecho de manejar la terminologa de jerarquas, funciones, variables, objetos y eventos, nos deja introducidos a un concepto superior llamado: clases. Que es la base de los proyectos en flash que nos ayudarn a realizar mega-sistemas que manejan animaciones, pelculas externas, sonidos, archivos de cualquier tipo, formularios, base de datos y compatibilidad con tecnologas como XML, HTML, CSS y PHP.. Pero esa... Es otra historia...