api.ning.comapi.ning.com/.../ejemplosconcretosdeactionscript.docx · web viewcada clip de imagen de...

79
ACTION SCRIPT: Puede hacer una comparación de este lenguaje con el de las personas para entender mejor la relación de objetos, propiedades y métodos. En nuestro lenguaje, se utilizan nombres, adjetivos y verbos como los elementos más básicos para construir oraciones con significado completo. Puede comparar el nombre con el objeto, los adjetivos con las propiedades y el verbo con el método que correspondería a la acción. Véase un ejemplo: El coche largo iba a Barcelona cotxe.llarg; cotxe.anar cotxe.witdth = 400; cotxe.gotoAndPlay (120); Como podéis observar, los métodos son las acciones, es decir, los verbos, sirven para hacer cosas, mientras que las propiedades indican las características de forma, tamaño, color ..., y así, como en nuestro lenguaje, los objetos (nombres) son totalmente necesarios para la construcción de frases. La sintaxis : _root (hace referencia a la línea de tiempo de la película principal). Ejemplo: _root.coche.mover_ruedas(); Llama a la función “mover_ruedas()” en el clip de la película “coche” que está en la línea principal. _parent (Hace referencia a la línea del tiempo de la película (padre) donde se encuentra esta acción. _x=¿ , _alpha , (Es una propiedad de una instancia que ubica a esa instancia en la coordenada x dada, o con una determinada transparencia…). Ejemplo: _root.Objeto1._x=1; Coloca en pa posición x=1 al objeto1 de la película principal. _root.objeto1._alpha=50; con la transparencia al 50%. Propiedades visibles del objeto 1

Upload: others

Post on 28-Feb-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

ACTION SCRIPT: Puede hacer una comparación de este lenguaje con el de las personas para entender mejor la relación de objetos, propiedades y métodos. En nuestro lenguaje, se utilizan nombres, adjetivos y verbos como los elementos más básicos para construir oraciones con significado completo. Puede comparar el nombre con el objeto, los adjetivos con las propiedades y el verbo con el método que correspondería a la acción.

Véase un ejemplo:

El coche largo iba a Barcelonacotxe.llarg; cotxe.anarcotxe.witdth = 400; cotxe.gotoAndPlay (120); Como podéis observar, los métodos son las acciones, es decir, los verbos, sirven para hacer cosas, mientras que las propiedades indican las características de forma, tamaño, color ..., y así, como en nuestro lenguaje, los objetos (nombres) son totalmente necesarios para la construcción de frases.

La sintaxis :

_root (hace referencia a la línea de tiempo de la película principal).

Ejemplo: _root.coche.mover_ruedas(); Llama a la función “mover_ruedas()” en el clip de la película “coche” que está en la línea principal.

_parent (Hace referencia a la línea del tiempo de la película (padre) donde se encuentra esta acción.

_x=¿ , _alpha , (Es una propiedad de una instancia que ubica a esa instancia en la coordenada x dada, o con una determinada transparencia…).

Ejemplo: _root.Objeto1._x=1; Coloca en pa posición x=1 al objeto1 de la película principal.

_root.objeto1._alpha=50; … con la transparencia al 50%.

Propiedades visibles del objeto movieclip

 

       Propiedad Descripción

 _alpha Determina la transparencia del clip de película (0 invisible, 100

opaco)._height Tamaño en píxeles de la dimensión vertical del clip de película._name Es el nombre de la instancia del clip de película.

_rotationLa orientación del clip de película desde 0 hasta 360 grados en el sentido de las agujas del reloj y respecto a su punto de registro como centro de giro.

_quality Da el grado de calidad de la película: baja, media, alta y la mejor.

1

Page 2: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

_visible Es un valor booleano (true o false) que indica si es o no visible el clip de película en el escenario.

_width Tamaño en píxeles de la dimensión horizontal del clip de película.

_x Coordenada horizontal del punto de registro donde se encuentra el clip de película.

_xscale Escala horizontal del clip de película desde el punto de registro expresada en tanto por ciento.

_y Coordenada vertical del punto de registro donde se encuentra el clip de película.

_yscale Escala vertical del clip de película desde el punto de registro expresada en tanto por ciento.

Propiedades invisibles del objeto movieclip   Propiedad Descripción   _currentframe El número del fotograma donde se está reproduciendo la

animación.

_droptarget La ruta de acceso del clip de película donde se ha arrastrado el otro clip de película.

_framesloaded Cantidad de fotogramas que se han descargado.

_soundbuftime Cantidad de segundos de flujo de sonido que se ha almacenado en la memoria intermedia ( buffer ).

_target Ruta de acceso en notación de barras de la instancia del clip de película.

_totalframes Número total de fotogramas de la instancia._url La dirección electrónica de la instancia._xmouse La coordenada del cursor en el eje X del clip de película._ymouse La coordenada del cursor en el eje Y del clip de película.

 on (press) Presionar.  on (release) Soltar.  on (releaseOutside) Soltar fuera del área activa (hit).  on (rollover) Situarse sobre el área activa (sin hacer clic, solo pasearse).

 on (Rollout) Al Salir fuera del área activa.  on (dragOver) Cuando se presiona el botón y arrastramos fuera de él y volvemos a entrar en él.  on (DragOut) Cuando se deja presionado y se arrastra fuera de su área activa.

BOTÓN PLAY CON SONIDO

*Al pasar por encima del botón

Se reproduce el sonido “CONTINUAR”

on (rollOver) {if (reproduciendo!="si") {

miejercicios= new Sound()miejercicios.attachSound("CONTINUAR")miejercicios.start(0,1)reproduciendo="si"

2

Page 3: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

*Al salir el puntero del área del botón…El sonido “CONTINUAR” se para

*Al pulsar y soltar el ratón… la película empieza a reproducirse.

}}

on (rollOut) {if (reproduciendo="si") {

miejercicios.stop("CONTINUAR")reproduciendo="no"

}}on (release) {

play();

}*Al pulsar el ratón… la película abre la página web “menú.html” en el entorno del fotograma de nivel superior en la ventana actual del navegador.

on (press) {getURL("menu.html","_top");

}

*Al pulsar y soltar el ratón… la película empieza a reproducirse en el fotograma 1 de la escena 2.

on (release) {gotoAndPlay("Escena 2", 1);

}*Al pulsar el ratón… la película empieza a reproducirse en el fotograma 400 anterior al actual.

on(press) {_root.gotoAndPlay(_currentFrame -400);

}*Al pulsar el ratón… la película empieza a reproducirse en el fotograma 400 posterior al actual.

on(press) {_root.gotoAndPlay(_currentFrame + 400);

}*Al pulsar y soltar el ratón… la película se detiene en el fotograma actual.

on (release) {Stop();

}Para que el fichero se reproduzca a

pantalla completa …Colocar en el primer fotograma)

“fscommand”Permite que el archivo SWF se comunique con Flash Player o con el programa que aloja Flash Player, por ejemplo, un navegador Web

En el primer fotograma ponemos:

fscommand("fullscreen",true);fscommand("showmenu",false); O en un botón:on (release){

//fscommand("fullscreen",true);fscommand("quit",true);

quit Ninguno Cierra el proyector.

fullscreen true o false

Si se especifica true, Flash Player se establece en el modo de pantalla completa. Si se especifica false, el reproductor vuelve a la vista de menú normal.

allowscale true o false

Si se especifica false, el reproductor se establece de forma que el archivo SWF se dibuje siempre con su tamaño original y nunca se cambie su escalan para no distorsionarse. Si se especifica true, se obliga al archivo SWF a cambiar su escala al 100% del reproductor.

showmenu true o false

Si se especifica true, se activa el conjunto completo de elementos de menú contextual. Si se especifica false, se atenúan todos los elementos de menú contextual excepto Configuración y Acerca de Flash Player.

execRuta de acceso a la aplicación

Ejecuta una aplicación desde el proyector.

trapallkeystrue o false

Si se especifica true, se envían todos los eventos clave, incluidas las teclas de aceleración, al controlador onClipEvent(keyDown/keyUp) en Flash Player

*onClipEvent : Controlador de eventos de un clip . Se puede “accionar” a la velocidad de los fotogramas (enterFrame), al cargarse el clip (load) al pulsar, soltar ... sobre él (mouseDown, mouseUp...etc)

* _root.attachMovie ("línea", línea1, 1); /*Con attachMovie creamos un duplicado de un clip. En este caso es el uplicado linea1 del clip padre linea, a profundidad 1. La diferencia está en que no hemos creado ninguna instancia en el escenario*/

AGUJAS RELOJ:

Creamos dos clip de agujas (colocando los “centros de masas en la crucecita) y ponemos los script…

En el clip de una aguja ponemos:

onClipEvent (enterFrame) { this._rotation ++;}El controlador de eventos (onClipEvent) hace que a la velocidad de los fotogramas (enterframe), las propiedad rotación (_rotation) que está escrita en ese mismo clip (this.), se incremente e uno (++ separados un espacio de rotation) (es decir 12 grados

3

Page 4: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

A los clips los hemos llamado en el campo “nombre de instancia”: aguja1 y aguja2.

cada segundo porque la película va a 12 fotogramas por segundo).

En la otra aguja ponemos:

onClipEvent (enterFrame) {this._rotation=_root.aguja1._rotation *2;}

Aquí le decimos a la aguja2 que su rotación (this le indica que es ella porque lo hemos escrito en ella) será la rotación de la aguja1 que está en la película principal (_root.aguja1._rotation) multiplicada por 2 (*2).

Hacer que se desplace un clip por el escenario horizontalmente

onClipEvent (enterFrame) {_root.buho_mc._x ++; Se desplaza a la velocidad de la película (ej: 12

píxels/seg)}

onClipEvent (enterFrame) {_root.buho_mc._x += 5; Se desplaza a 5 por la velocidad de la película (ej:

5*12 =60 píxeles por segundo...)

if (_root.buho_mc._x>400) {_root.buho_mc._x = 1;

} /*Para evitar que el buho se salga por el lado derecho del escenario limitamos su valor _x a 400 , si se pasa se coloca automáticamente al principio.}

Ejemplo de añadir comentarios ( de una línea con // y de más de una línea con /* al principio y */ al final)

Ejemplo de función que lleva a un fotograma determinado…

stop();//Botón fotograma 10boto1_btn.onPress = function() {

gotoAndStop(10);};/*Hemos creado una función definida por nosotros. Así al pulsar el boton esa funcíon hace que la película vaya y se detenga en el fotograma 10*/

FICHEROS EXTERNOS DE SCRIPTSSon ficheros de scripts externos muy útiles para cambiar la programación DESDE EL BLOC DE NOTAS , sin entrar en flash y también para crear PAQUETES DE ACTIVIDADES.

El script anterior lo hemos exportado como “boto1.as” y guardado en la misma carpeta que el archivo “ac_as. swf” con el que lo queremos relacionar.Dentro del archivo “ac_as. swf” hemos puesto en el primer fotograma:#include "boto1.as" (hay un espacio entre include y “) (Este archivo también lleva un botón cuya instancia se ha llamado “boto1_btn”, ya que en el script que se importa hay un botón llamado así que se comportará como este definido el archivo “boto1.as” )#include "boto1.as" hará que el botón “boto1_btn” adquiera la programación que lleva incorporada el fichero externo “boto1.as” y que podremos modificar sin necesidad de abrir Fash, solo abriendo con un editor de texto el fichero externo.

AUMENTAR CONSTANTEMENTE EL LARGO

A través de eventos de clip de película onClipEvent

onClipEvent (enterFrame) {_width ++;}/Este evento asociado a un clip de película onClipEvent ( aun clip que es una instancia de un cuadrado por ejemplo) hace que constantemente (enterframe va asociado a la velocidad de los fotogramas…) aumente la longitud (valor x ) del cuadrado (width) en una unidad (++).

onClipEvent (mouseDown) {_width ++;}

// Igual que antes pero ahora se efectúa la acción de aumentar el largo cada vez que se pulsa con el botón izquierdo del ratón (mouseDown)

onClipEvent (mouseUp) {_width ++;}

// Idem antes pero cada vez que se suelta el botón izquierdo después de hacer clic. (mouseUp)

onClipEvent (mouseMove) {_width ++;}

4

Page 5: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

// Idem antes pero cada vez que se mueve el ratón. (mouseMove)

onClipEvent (KeyDown) {_width ++;}

onClipEvent (KeyUp) {_width ++;

}

// Idem antes pero cada vez que se pulsa (keyDown) w o suelta (keyUp)cualquier tecla. (mouseUp)

FUNCIÓN QUE HACE GIRAR UNOS CLIP onEnterFrame = function () {moli1_mc._rotation -=10;moli2_mc._rotation++;

};// Equivalente a onClipEvent(enterFrame)… pero en vez de escribirlo en la instancia del cip de película, lo hemos hecho en un fotograma de acciones y a través de una función que hemos definido nosotros que hace que los clip moli1_mc y moli2_mc , roten, el primero 10 º en sentido contrario a las agujas del reloj (-=10) a la velocidad de la película ( es decir cada 1/12 segundos retrocede 10º) y el otro aunmenta 1º cada 1/12 segundos ( es decir 12º cada segundo)

HACER DESAPARECER UN CLIP A TRAVÉS DE UN BOTON

boto1_btn.onPress = function() {_root.ret_mc.conejo_mc._visible =0;

}

//El botón (boto1_btn) , al pulsarlo (Press, ) llama a una función creada por nosotros que hace que el clip (conejo_mc) que está dentro del clip (_ret_mc) que a su vez está dentro de la película raiz o principal (_root), se vuelva con la propiedad _visible a 0. (invisible)

TODO LO DE ANTES ESTABA INSERTADO EN UN FOTOGRAMA DE LA CAPA ACCIONES…Ahora vamos a hacer lo mismo pero insertando las acciones dentro de los clips.

onClipEvent (load) { this._visible=0;}//Hemos puesto esto dentro del clip conejo__mc. Para que cuando se cargue el clip en la película (onClipEvente (load), su visibilidad de vuelva a 0.

on (press) { this.barret_mc.conejo_mc._visible=100;}

//Esto lo hemos puesto en el clip del botón para que al presionarlo, la visibilidad del clip cone_mc, que está dentro del clip barret_mc, que a su vez está en la película padre de la del botón (this), se vuelva a 100. Hubiera valido igual en vez de this. ->_ root, ya que this, en este caso se refiere a _root al estar el clip donde se ha escrito dentro de root.

Al PRESIONAR UN BOTÓN APARECE EL VALOR DE UNA VARIABLE EN UN CAMPO DE TEXTO DINÁMICO En este caso el botón redondo gris (que está en _root) tiene la misión de hacer

aparecer el valor “D105” de la variable nom_variable (que es un campo de texto dinámico) que está dentro del clip amarillo (groc_mc), que está dentro del clip azul (Blau_mc) que a su vez está dentro del clip rojo (vermell_mc) que está en la película principal junto al botón. Se supone que antes se ha definido la variable (nom_variable=”D105”) En este caso, como D105 está entre comillas tiene un valor de cadena de letra solamente y eso es lo que aparece en el campo de texto (cuadradito blanco) al que en el campo VAR se le habrá asignado (nom_variable) para que aparezca en él.

moli1_mc

moli2_mc

boto1_btn

conejo_mc

5

Page 6: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

Es análogo a lo anterior , pero el botón esta dentro del clip rojo con lo que sólo hace falta indicar la ruta desde el rojo (this. Azul..) hasta la variable del campo de texto dinámico, que esta en el amarillo.

Ahora la variable (campo de texto dinámico en el que aparece) esta directamente colgada en _root, por ello ese script… dentro del botón redondo gris…

Análogo a todo lo anterior pero se ha utilizado la propiedad (_parent) que hace referencia al nivel superior donde esta colgado el clip… En este caso la variable esta a dos niveles de donde está el botón, es decir en el directorio padre del directorio padre donde está el botón.

UN CLIP SALTA LA CANTIDAD DE UNA VARIABLE AL PRESIONAR UN BOTON

this.barret_mc.conill_mc._visible = 0;boto1_btn.onPress = function() {

_root.barret_mc.conill_mc._visible = 100;_root.barret_mc.conill_mc._y=-salta;

};// Este script hace que al introducir un número en el cuadrito (que es un campo de entrada de texto al que se le ha asociado la variable (salta) en el campo VAR, el conejo aparece a la distancia _y que le hemos introducido en la variable . (_y=-salta hace que la posición actual del conejo suba (-) la cantidad que le pongamos…)

CREAR UNA BATERÍA DE PREGUNTAS PARA AUTOEVALUACIÓN

solucio01 = "Hipocentro";boto1_btn.onPress = function() {

if (resposta01 == solucio01) {abuelos = "Fantástico " + nombre;

} else {abuelos = "La respuesta no es correcta "+ nombre;

}};

/ * Valor inicial de las variables * /solucio01 = "Hipocentro";errores = 1; contador = 0; / * Incidencia de ratón para validar la primera pregunta * /boto1_btn.onPress = function() {

if (resposta01 == solucio01) { //Si la respuesta es igual a la solución

_root.boto1_btn._visible = 0; //Desaparece el botón de corregir ya que debajo han puesto un gráfico con el sigo verde de correcto que aparecerá así cuando la respuesta es correcta al desaparecer el botón.

abuelos = "Fantástico "+nombre; //En el campo dinámico abuelos (mala traducción de aviso) sale el texto “fantastico “(con dos espacios para separar el texto de la variable) “ seguido del nombre que hayan puesto en el campo de texto dinámico definido en VAR como nombre.

} else { //Si no ocurre lo de antes.

contador = errores++; //la variable contador aumenta en uno

abuelos = "La respuesta no es correcta "+nombre;

1.-Campo de texto dinamico como variable “nombre”

2.-Campo de texto dinamico como variable “abuelos”

3.-Campo de texto dinamico como variable “contador”

Campo de texto dinamico como variable “resposta01”

Instancia de boton lamada imprimir_btn

Instancia de boton lamada boto1_btn

6

Page 7: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

El puntito blanco es el clip (imprimir_mc) que consta de dos fotogramas. El segundo se ha etiquetado como (#p) que hace que esté etiquetado para ser impreso y contiene el el campo de texto dinamico como VAR (informe)

// y la variable abuelos presenta ese texto seguido del nombre…delete resposta01;

//y también se borra el texto escrito en la variable resposta01…

}};

/ * Función para detener la instancia imprimir_mc * /onEnterFrame = function () {//Definimos una función que se ejecutará al entrar la película en ese fotograma

imprimir_mc.gotoAndStop(1);//definimos en la función que la instancia de clip imprimir_mc se detenga en el fotograma1 (Esto hará que no aparezca el fotograma 2 de esa instancia que es donde está el campo dinámico en el que se escriben los resultados del informe que se imprime)

};/ * Incidencia de ratón para imprimir la variable informe * /imprimir_btn.onPress = function() {//Definimos para ese botón una función que al presionarlo hará que…

_root.imprimir_mc.informe = "el alumno "+nombre+"ha tenido "+contador+"errores en la pregunat número 1";// en el campo dinámico con VAR informe , de la instancia imprimir_mc de la película raiz se muestran esos textos(entre “”) con los valores de esas variables… (+loquesea)

print(_root.imprimir_mc, "bmovie");//imprime el contenido de la ruta de esa instancia de clip con el parámetro “bmovie” que hace que el texto esté dentro del clip…}; 

Lo que está haciendo es crear una variable llamada solucio01 y darle el valor "hipocentro", que es la respuesta correcta a la primera pregunta. • Cuando la instrucción | if| compruebe que la respuesta que el alumno ha introducido dentro de la variable de texto de entrada resposta01 coincide con el valor "hipocentro" de la variable solucio01 activará el valor "Fantástico" de la variable abuelos.

• Si la respuesta no es correcta, el lector de script saltará hasta la instrucción | else | que activará como valor de la variable abuelos (MALA TRADUCCIÓN DE AVISO) "La respuesta no es correcta"*Al poner después de “Fantastico” + nombre Añadimos en el campo( abuelos) el nombre que haya puesto el evaluado en la variable nombre que está en la entrada de texto de escribir el nombre. Se ha puesto en VAR nombre.

PULSAR SOBRE UN BOTÓN Y APARECE SONIDO Y TEXTO ASOCIADO

Ejemplo De la pera: -La palabra “pera” aparece en un campo de texto dinámico que es la VARIABLE (VAR) “nom” (las “” no se ponen).-El botón pera tiene su sonido (PERA) en el fotograma “pulsado” y está con sincronización “EVENTO” ya que los botones llevan los sonidos con esta sincronización para que funcione.El botón pera tiene como nombre de instancias “pera” (para poder “llamarlo” con la programación…

// Al presionar el botón “pera_btn” definimos una fucnción que hara que:pera_btn.onPress = function () { nombre = "pera";  // Que la variable “nombre” muestre la cadena de caracteres “pera”pera_btn._alpha = 50;  // Que el botón tendrá el 50% de trasnparecia platan_btn._alpha = 100;  // Que el resto de botones sigan sin transparencia…tomaquet_btn._alpha = 100; poma_btn._alpha = 100; taronja_btn._alpha = 100; raim_btn._alpha = 100; }; platan_btn.onPress = function () { nombre = "plátano"; pera_btn._alpha = 100; platan_btn._alpha = 50; tomaquet_btn._alpha = 100; poma_btn._alpha = 100; taronja_btn._alpha = 100; 

Instancia de boton lamada boto1_btn

7

Page 8: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

raim_btn._alpha = 100; }; 

ETC … para el resto de frutas… Y todo en el primer fotograma de la capa acciones…

CAMBIAR LA CALIDAD DE LOS SONIDOS DE UNA APLICACIÓN HECHA (continuación antes)

El sonidos 'de evento' se cargan completamente antes de reproducirse. Los sonidos 'de flujo' se reproducen mientras se descargan. La reproducción comienza en el momento en que se han recibido suficientes datos para iniciar el descompresor. 

Todos los archivos MP3 (de evento o flujo) cargados mediante este método acumularán en la caché del navegador del sistema del usuario.

-Se abre la biblioteca y se abre el sonido con el botón derecho. -Abrimos “Vinculación” -Ponemos un nombre identificador y marcamos las casillas de la imagen izquierda.-Después en el primer fotograma de Acciones añadimos lo que está resaltado :

pera_btn.onPress = function () { nombre = "pera"; / / Se crea una instancia del objeto Sound “llamada sonido”sonido = new Sound (); / * Exportar el sonido de la biblioteca con el nombre pera.mp3 que hemos dejado en el vinculado. attachSound asocia el sonido especificado (pera.mp3” a la instancia del objeto Sound definida antes como “sonido” * / sonido.attachSound ("pera.mp3"); / / se reproducirá el sonido desde el principio y una sola vez sonido.start (0, 1); / * el botón pera_btn cambiará su transparencia al 50% . El resto de botones no tendrán transparencia * / pera_btn._alpha = 50; platan_btn._alpha = 100; tomaquet_btn._alpha = 100; poma_btn._alpha = 100; taronja_btn._alpha = 100; raim_btn._alpha = 100; }; 

Y así con las demás frutas…Flash permite crear películas que tienen los sonidos en archivos externos que se pueden ir cargando en función de las necesidades. Esto libera el peso final de la película y permite cambiar los sonidos sin editar el fla. 

El resumen de toda la programación de la aplicación estaría en el primer fotograma de la línea de tiempo y sería

/ * Definimos la función “posa_so” que al llamarla cuando pulsamos el botón de cada fruta tomará el sonido correspondiente y lo reproducirá. Todos los sonidos están en una carpeta llamada sonidos * / function posa_so () ( / / Se crea una instancia que llamamos "sonido" del objeto Sound sonido = new Sound (); / * Creamos la variable “nombre” (que será un campo de texto… en el que aparecerá la cadena sonidos y el nombre de la fruta que sale en la variable “nombre” seguido de la cadena mp3…) . * / nombres = "sonidos /" + nombre + ". mp3"; 

/ * El método loadSound carga un archivo MP3 en el objeto Sound llamado “sonido”  Si el sonido es un 'flujo' de sonido, pondremos un 1 (true). Si el sonido es 'de evento' pondremos un 0 (false) .* / 

8

Page 9: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

sonido.loadSound (nombres, 1); / / Se reproducirá el sonido desde el principio y una sola vez sonido.start (0, 1); ) 

pera_btn . onPress = function () ( 

/ / Al ser la variable nombre una variable de texto, deberá ir entre comillas. nombre = "pera"; / / Llamamos a la función creada antes que tomará el sonido de la carpeta 'sonidos' y lo reproducirá posa_so (); / * Jugaremos con la propiedad _alpha del botones para dar más calidad a la aplicación. Cualquier instancia, sea clip, sea botón o cuadro de texto tendrá esta propiedad y unas cuantas más * / pera_btn._alpha = 50; platan_btn._alpha = 100; tomaquet_btn._alpha = 100; poma_btn._alpha = 100; taronja_btn._alpha = 100; raim_btn._alpha = 100; ); 

IMPORTAR VÍDEOS FLV DINÁMICAMENTE

/ * Creamos una instancia del objeto NetConnection (Es una clase que establece conexiones a vídeos que están en un lugar concreto externo)conexion = new NetConnection();/ * Abrimos una nueva conexión (connect) llamada “conexión”… Null es una constante que se devuelve si no hay datos…conexion.connect(null);/ * Abrimos una instancia del objeto NetStream y la llamamos stream (ese objeto es una especie de canal que se utiliza dentro de la conexión NetConnection y que permite reproducir los vídeos…stream = new NetStream(conexion);/ * Asociamos la instancia de vídeo (video_dinamic la hemos llamado donde se pone el nombre de las instancias…) a la instancia “stream” creada antes a través del método attachVideo que controla el flujo del vídeo dentro de unos límites…video_dinamic.attachVideo(stream);/ * A través del método “Play” del objeto NetStream reproducimos el vídeo “video.flv” (stream le indica el camino…)stream.play("video.flv");

CONTROLAR VÍDEOS FLV DINÁMICAMENTE

En el primer fotograma de la línea de tiempo pondréis el siguiente código/ * Creamos una Instancia (la llamamos “conexión”) del objeto NetConnection para poder establecer una comunicación con contenidos externos * / conexion = new NetConnection();/ * connect (null) abre una conexión local con la que se pueden reproducir archivos de vídeo (FLV) desde una dirección HTTP o desde el sistema de archivos local .* /conexion.connect(null);/ * A continuación creará una instancia del objeto NetStream que es una especie de "canal" dentro de una conexión definida con NetConnection y permite reproducir documentos FLV externos. Puede llamar stream a esta nueva instancia. * /stream = new NetStream(conexion);/ * A continuación relacionamos la instancia stremm a la instancia video_blank que tiene en el escenario * /.video_blank.attachVideo(stream);/ * A continuación creamos la variable tiempo transcurrido y le damos el valor 0temps_transcorregut = 0;/////////////////////////////but_stop.enabled = 0;but_stop._alpha = 50;

9

Page 10: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

but_tornar_començament.enabled = 0;but_tornar_començament._alpha = 50;but_anar_final.enabled = 0;but_anar_final._alpha = 50;///////////////////////////////////Al pulsar el botón  Esa funcion hace que… lo desactivamos (0), se transparenta la mitad (50) ( el de retornar al principio igual) Activamos el Stop y se ve a tope (alfha 100%)el vídeo comenzará a reproducirsebut_play.onPress = function() {

this.enabled = 0;this._alpha = 50;but_stop.enabled = 1;but_stop._alpha = 100;but_tornar_començament.enabled = 0;but_tornar_començament._alpha = 50;stream.play("video.flv");

};Al pulsar el botón  se parará la reproducción del vídeo. stream.pause () actúa como un conmutador: la primera vez detiene la reproducción, la siguiente la reanudabut_stop.onPress = function() {

//this.enabled = 0;//this._alpha = 50;but_play.enabled = 0;but_play._alpha = 50;//per que al fer la pausa el video retorni al començament//stream.seek(0);stream.pause();//temps transcorregut//_global.temps_transcorregut = stream.time;but_tornar_començament.enabled = 1;but_tornar_començament._alpha = 100;

};Al pulsar el botón  la reproducción comenzará otra vez. stream.seek (0) la cabeza lectora se pone al comienzo de la reproducción del vídeo.but_tornar_començament.onPress = function() {

stream.seek(0);this.enabled = 0;this._alpha = 50;but_play.enabled = 1;but_play._alpha = 100;but_stop.enabled = 0;but_stop._alpha = 50;/*if (but_play.enabled=0) {

stream.pause();}*/

};

CÓMO HACER UNA ACTIVIDAD EDUCATIVA con información, preguntas, ayuda, informe de errores…

En el primer fotograma capa acciones…

p_silabes = ["to-", "mà-", "quet"];/*Definimos la variable p_silabes que contiene un array entre corchetes (matriz) que son esas tres cadenas de caracteres entre comillas (las silabas que aparecerán). Gracias al Array cada sílaba está identificada por su posición (orden) y se podrá acceder a ellas eficazmente para lo que haga falta… */paraula = "tomàquet";/*Definimos la variable llamada paraula cuyo valor sera esa cadena de caracteres entre comillas que se refieren a la imagen a identificar. */ajut = 0;/*En el campo dinamico hecho variable con nombre “ajut” aparecerá como valor el 0. Ajut es un contador */pagina = 1; /*Definimos esa variable con valor inicial 1

10

Page 11: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

iparaula = ""; /*El campo de introducción de texto llamado iparaula estará sin caracteres (es decir vacio (“”)) Así se borrará lo escrito cada vez que pasemos a una nueva fruta.silabes = ""; /*El campo dinamico de texto llamado silabes se vaciará (“”)/*El clip de la película principal (_root.) llamado clip_resultat… Se quedará quieto en el fotograma 1 (Donde no tiene ninguna imagen. Y si la hubiera del resultado de otra fruta, desaparecería._root.clip_resultat.gotoAndStop(1);ex = "<B><I>Exercici </I></B>"+pagina;/* Definimos la variable llamada ex que es un contador (cuenta los ejercicios) que hace que aparezca la cadena de texto Exercici y el número de la variable llamada página (definida antes como 1). (Los símbolos de la B y la I antes y después de la palabra exercici es un lenguaje de HTML que hace que esa palabra aparezca en negrita (<B> y cursiva <I> Y después quita esas características (</B> y </I>… */stop();

Definimos la programación de los botones haciendo clic en ellos y escribiendo…

En el botón de ayuda

on (press) {if (ajut<p_silabes.length) {

ajut++;silabes = silabes+p_silabes[ajut-1];

}}/

/ *Al presionar ese botón - Si la variable ayuda (Ajut) es menor que el número de miembros (sílabas) del Array definido antes (lengt cuenta el número de elementos del Array)-Entonces la variable ajut aumenta su valor en una unidad (++) -En el campo de texto dinámico llamado silabes, añadimos a lo que estaba ( es decir el valor de ahora se sílabes), una sílaba del Array llamado p_silabes y será el elemento cuyo orden sea lo que vale la variable ajut menos 1. Es decir al presionar el boton ayuda la variable ayut (que se definio como 0) valdrá 1 con lo que aparecerá del Array el elemento primero.( En las Arrays los elementos viene definidos como 0 el primero, 1 el segundo etc… Así : p_silabes [0] , p_silabes [1] ,p_silabes [2, p_silabes [3 ]....... ]

/

En el botón corregir ponemos…

on (press) {if (iparaula == paraula) {

_root.clip_resultat.gotoAndStop(2);

} else {_root.clip_resultat.gotoAndStop(3);

/*si la resposta .es incorrecta no es pot passar i s'incrementa en 1 el compatdor d'errades*/

}}/* Al presionar este botónSi la variable ipalabra (lo que escribe el que hace la actividad) es igual

imatgeVariable llamada ex (texto dinámico)

11

Page 12: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

a la variable paraula (que la cadena de texto tomate)El clip clip_resultado,que está en la película principal (_root.) irá y se parará en el fotograma 2 (donde aparece la cara sonriente )Si no es igual irá y se parará en el fotograma 3 que es la cara seria…por no haber acertado.*/

Para el resto de frutas añadimos nuevos fotogramas clave en la capa acciones y añadimos los correspondientes gráficos

Así sería las programaciones de esas frutas…

p_silabes= ["ta-", "ron-", "ja"];paraula="taronja";ajut = 0;pagina=2;iparaula = "";silabes="";_root.clip_resultat.gotoAndStop(1);ex = "<B><I>Exercici </I></B>"+pagina;stop();/*Simplemente cambiamos las sílabas del Array p_silabes , la variable paraula, pagina…*/

Para pasar de una actividad a otra hay que resolver antes bien la primera para ello ponemos un filtro:

Así quedaría el fotograma de la capa de acciones correspondiente al tomate (Lo que se ha añadido está en azul fuerte…) :

p_silabes = ["to-", "mà-", "quet"];paraula = "tomàquet";ajut = 0;pagina = 1;iparaula = "";silabes = "";_root.clip_resultat.gotoAndStop(1);ex = "<B><I>Exercici </I></B>"+pagina;ajut_acumulat = 0;errors = 0;/*Añadimos dos nuevas variables que harán de contadores y cuyo valor inical será 0*/stop();

Así quedaría el botón de ayuda :

on (press) {if (ajut<p_silabes.length) {

ajut++;ajut_acumulat++;/*El contador ajut_acumulat,definido por otro lado,

aumenta en una unidad*/silabes = silabes+p_silabes[ajut-1];

}}

Así quedaría el botón de corregir :

on (press) {if (iparaula == paraula) {

_root.clip_resultat.gotoAndStop(2);12

Page 13: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

pas = "Si";

} else {_root.clip_resultat.gotoAndStop(3);pas = "No";errors++;

}}/* En la letra azul hemos creado una variable y la hemos llamado pas (paso) su valor será la cadena de letra si, cuando la respuesta es correcta y no para lo contrario, además de incrementarse en una unidad el valor de la variable errors. Esta variable se utilizará después. */

Así quedaría el botón de continuar:

on (press) {if (pas == "Si") {

gotoAndStop(pagina+1);}

}

/* Al presionarlo si la variable pas (definida en el botón corregir) tiene como valor Si , la película ira al fotograma siguiente (otra fruta ) y se parará.Ahora vamos a crear un fotograma que albergará un resumen de la estadística de resultados de la actividad…(se han dejado varios fotogramas vacíos por si se quisieran añadir frutas posteriormente…

Creamos un campo de texto dinámico (multilínea) que actuará como variable llamada resum (a través del código HTML que se puede utilizar en Flash, podemos poner el resumen “bonito”…)

En el fotograma (nuevo ) ponemos esto:

if (errors == 0) {comentari = "Molt bé";

} else if (error == 1 || errors == 2) {comentari = "Bé, però tens alguna errada";

} else {comentari = "Has de repassar una mica";

}resum = "Resum de l'activitat de les <B>fruites</B><BR>Has necessitat: <B><I><Font size='+1'>"+ajut_acumulat+"</font></i></B> ajuts<BR>Has tingut: <B><I><Font size='+1'>"+errors+" </font></i></B> errors<BR><Font size='+2'><B>"+comentari+"</B></font>";stop();

/* Si la variable errors vale 0, en el campo dinamico que es la variable llamada comentari aparecerá ese texto entrecomillado (“Muy bien”).

Si no ocurre eso y la variable errors vale 1 o 2, aparecerá “Bien. Pero tienes algunos errores…(o lo que queramos poner)

En caso de que no ocurra nada de lo anterior el comentario de la variable comentari sera :” Has de repasar un poco…”

Después a la variable resum la definimos de forma que aparecerá el texto :

13

Page 14: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

“Resumen de las actividades de las frutas:

Has necesitado 1* ayudas.Has tenido 2* errores. 3* “1*.- Es el valor de la variable ayudas (ajut_acumulat)2*.- Es el valor de la variable errors y 3*.- Es lo que ponga en la variable llamada comentari definida antes.

Recordad que : <B> poner en negrita <I> poner en cursiva <Font size='+1'> aumenta el tamaño de la letra en una unidad, <BR> es salto de línea… (y si llevan delante / , </B>, </I> </font>… se cierra la modificación.

En el fotograma de la capa acciones de la última fruta cambiamos la palabra “continuar” por “acabar” y ponemos:

on (press) {if (pas == "Si") {

gotoAndStop(10);}

}

/* Con esto si se ha resuelto la última actividad bien nos llevará al fotograma 10 donde está el resumen de la actividad.*/

AHORRO DE TRABAJO: USO DE LAS FUNCIONES

*Definimos la función inicia():Que ejecutará todo eso que se repite en todas las frutas y así nos ahorraremos escribirlo en cada una de ellas…

*Definimos la función ajuda():Que ejecutará todo eso que ya vimos anteriormente…

*Definimos la función corregir():Que ejecutará todo eso que ya vimos anteriormente…

Si en este tipo de actividades quisiéramos cambiar algo en la programación, tendríamos que hacerlo en cada uno de los fotogramas (mucho trabajo). Si los miramos bien vemos que hay estructuras de programación que se repiten en todos ellos. Estás “rutinas” de programación nos las podemos ahorrar gracias a las funciones, que ejecutan esas estructuras allá dónde se les “llama”.

En el primer fotograma (correspondiente a la imagen del tomate) ponemos:

ajut_acumulat = 0;errors = 0;p_silabes = ["to-", "mà-", "quet"];paraula = "tomàquet";pagina = 1;function inicia(){ajut = 0;iparaula = "";silabes = "";_root.clip_resultat.gotoAndStop(1);ex = "<B><I>Exercici </I></B>"+pagina;stop();}inicia(); /*Llamamos a la función inicia para el tomatefunction ajuda() {

if (ajut<p_silabes.length) {ajut++;ajut_acumulat++;silabes = silabes+p_silabes[ajut-1];

}}function corregir() {

if (iparaula == paraula) {_root.clip_resultat.gotoAndStop(2);pas = "Si";

} else {_root.clip_resultat.gotoAndStop(3);

14

Page 15: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

*Definimos la función continuar_acabar():Que ejecutará todo eso que ya vimos anteriormente…

Con estas tres funciones recogemos la programación que tenían antes los tres botones…

pas = "No";errors++;

}}function continuar_acabar() {

if (pas == "Si") {gotoAndStop(pagina+1);

}}

Como vemos una función tiene siempre esta estructura:

function nombre_delafucnion() {Código que debe hacer cuando se le llame

}

Y pueden llevar distintos parámetros

function nombre_delafucnion(param1, param2,param3) {Código que debe hacer cuando se le llame

}

Aplicamos en cada botón la llamada a su correspondiente función…

on (press) {ajuda()

}

on (press) {corregir()

}

on (press) {continuar_acabar()

} Gracias a las funciones estructuramos la programación y es más intuitiva y ágil.

Por ejemplo:

En el clip_resposta hay cinco fotogramas: el primero vacío, y los demás como las imágenes de la izquierda…Hasta ahora en el botón corregir, ibamos al fotograma 2 (:-))) si la respuesta era buena y al 3 ( :-)))si era mala. Pues ahora, con las funciones podemos cambiar estos fotogramas por el 4 (BE!) y 5 (NO!)respectivamente. Y ya no tenemos que hacer estos cambios en los botones de cada fruta UNO POR UNO sino solamente en la función corregir().

Para el resto de fotogramas de las otras frutas solo hay que poner la programación que varía de una fruta a otra ya que el resto se hace a través de llamada a la función inicia().

p_silabes = ["ta-", "ron-", "ya"]; paraula = "taronya"; pagina = 2; / * Sólo queda fuera de la función la parte que varía, el resto ya queda incluida en esta. El código queda más reducido. En este caso el ahorro es poco, pero nos podemos encontrar con aplicaciones donde la mejora sea mucho más significativa * / inicia ();

15

Page 16: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

ETC…(Acordaos que con la traducción puede haber un poco de lío…)

MEJORAS DE NUESTRO ARCHIVO PARA SU PUBLICACIÓN EN INTERNET

Si una aplicación se va a publicar en Internet es muy conveniente que sea lo más “ligera” posible (no puede tirarse mucho rato cargándose …)Por ello se utilizan archivos externos que sólo se cargan si son llamados, con lo que la aplicación no se sobrecarga.Además vamos a reducir sensiblemente el número de fotogramas.

Pasaría de:

a..

Creamos un Array (entre corchetes) que contendrá todos los arrays (entre corchetes a su vez cada uno), que antes andaban sueltos, correspondientes a todas las frutas (el primer elemento de este Array sería ahora los primeros corchetes, lo referente al tomate).

Idem para la variable paraules

Definimos esta la funcion inicia()

-*A : Con ella ponemos a 0 el valor de la variable ayuda.-*B : En el campo dinámico que actúa como la variable llamada silabes_paraula ponemos el primer elemento del Array p_silabes (que es el subArray de la fruta en la que estemos según el valor de la variable página) ) (restamos 1 porque en las Arrays el primero es el 0)…-*C :Idem para la variable paraula, pero estableciendo su valor (no es un campo dinámico)… -//*D y //*E como otras veces…-//*F : Cargamos en el clip_imatge, a través de la función loadMovie (está función viene definida ya por flash y lo que hace es cargar en un clip un archivo swf, jpg…), el archivo que se encuentra en la carpeta imatges_fruites/cuyo nombre es el valor del primer elemento del Array paraules con extensión jpg. Es decir llamaría a este archivo: Imatges_fruites/tomáquet.jpg (que es el archivo llamado

En el fotograma1 los cambios son:

En la capa acciones tenemos ( ya con los colores propios de la programación flash, para verlo mejor…:

ajut_acumulat = 0; /*Ponemos esta variable a 0*/errors = 0; /* Idem*/

p_silabes = [["to-", "mà-", "quet"], ["ta-", "ron-", "ja"], ["ra-", "ïm"], ["po-", "ma"], ["plà-", "tan"], ["pe-", "ra"]];paraules = ["tomàquet", "taronja", "raïm", "poma", "plàtan", "pera"];pagina = 1; /* Como hasta ahora …function inicia() {

ajut = 0; //*Asilabes_paraula = p_silabes[pagina-1]; //*Bparaula = paraules[pagina-1]; //*Ciparaula = ""; //*Dsilabes = ""; //*Eclip_imatge.loadMovie("imatges_fruites/"+paraules[pagina-

1]+".jpg"); //*F_root.clip_resultat.gotoAndStop(1); //*Gex = "<B><I>Exercici </I></B>"+pagina; //*H

if (pagina<6) { //*I_root.clip_continuar.gotoAndStop(1);

} else {_root.clip_continuar.gotoAndStop(2);

}

stop();}

16

Page 17: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

tomàquet.jpg que se encuentra en la carpeta imatges_fruites.-//*G : El clip_resultat, estará parado en el fotograma 1- //*H : En el campo que es ñla variable llamada ex saldrá En negrita y cursiva el valor de la variable página” //*I : Con esta programación hacemos que si el valor de la variable página es menor a 6 (que no han salido todas las frutas) siempre aparecerá la palabra continuar en el clip_continuar si no aparecerá la palabra acabar ( el clip_continuar tiene dos fotogramas con sendos stop. En el 1º pone continuar y en el 2º acabar)

Adaptamos la función ajuda a los nuevos arrays… - Si la variable ayuda (Ajut) es menor que el número de miembros (sílabas) del Array silabes_paraula (lengt cuenta el número de elementos del Array) Este Array será el que corresponda del Array superior p_silabes según la página en que estemos)-Entonces la variable ajut aumenta su valor en una unidad (++) -En el campo de texto dinámico llamado silabes, añadimos a lo que estaba ( es decir el valor de ahora se sílabes), una sílaba del Array llamado silabes_paraula y será el elemento cuyo orden sea lo que vale la variable ajut menos 1.

No varía

-Ahora la función continuar_acabar se define así:Si la variable pas es igual a si, entonces si la variable página es inferior a 6 (porque no han salido todas las frutas), aumentara en una unidad y se ejcutará la función inicia(que actúa como reiniciando todas las variables para una nueva fruta…) En caso de que la variable pagina valiera 6 pasaremos al fotgrama 2 )Si la variable pas fuera distinto a si , la película seguiría parada donde está.

inicia();

function ajuda() {if (ajut<silabes_paraula.length) {

ajut++;ajut_acumulat++;silabes = silabes+silabes_paraula[ajut-1];

}}

function corregir() {if (iparaula == paraula) {

_root.clip_resultat.gotoAndStop(2);pas = "Si";

} else {_root.clip_resultat.gotoAndStop(3);pas = "No";errors++;

}}

function continuar_acabar() {if (pas == "Si") {

if (pagina<6) {pagina++;inicia();

} else {gotoAndStop(2);

}} else {

stop();}

}En el fotograma dos seguimos teniendo el campo de texto dinámico que actúa como la variable resum, y que no ha cambiado nada.

17

Page 18: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

SALIDA ALEATORIA DE LAS FRUTAS

Puede ser interesante que el orden de las preguntas de una actividad sea aleatorio, para ello se utilizan Arrays dinámicos

-LA clase system de flash contiene propiedades que se desarrollan en nuestros ordenadores. En este caso, con la propiedad useCodepage, nuestro ordenador usará (true) los códigos tradicionales de caracteres en nuestro navegador, para evitar problemas con los caracteres de texto.

Añadimos al fotograma 1 anterior, al principio:

System.useCodepage = true; function reordena(n) { //*Definimos esta función de n elementos

permuta = new Array(); //*Creamos esta matriz (Array) llamada permutapermuta[0] = random(n); //*Definimos que el primer elemento de la matriz

18

Page 19: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

permuta (permuta[0] ) sea un número aleatorio (random es un método de action script que devuelve un número aleatorio de n números).

for (i=1; i<n; i++) { //*for es un bucle (una acción o acciones repetida constantemente) que evalúa una variable (i) que en este caso deambula por la matriz…En este caso i vale inicialmente 1; su valor es siempre menor que n y se incrementa en una unidad a cad “vuelta” del bucle…con lo que cuando llegue a 10 se parará el bucle.

controla_repeticions(); //*Llamamos a esta funciónwhile (control == 0) { //*La sentencia while evalúa lo del

paréntesis que en este caso es que si se cumple que la variable control vale 0, se llama a la función controla_repeticions…

controla_repeticions();}

}}function controla_repeticions() { //*Definimos esta función

control = 1; //*creamos la variable llamada control y le asignamos el valor 1permuta[i] = random(6); //*Establece como elemento que ocupa el lugar i

en la matriz un número aleatorio (Randon entre 1 y 6)for (j=0; j<i; j++) { //*Y establece otro bucle análogo al anterior pero con la

variable j, de forma que …if (permuta[i] == permuta[j]) { //*Si coincidieran los valores

aleatorios con el mismo elemento de la matriz, es decir, que se repitecontrol = 0; //*La variable control valdría 0 con lo que se

ejecutaría la setencia while de antes que controla las repeticiones, con lo que se buscaría otro valor aleatorio en esta función…

}}

} todo esto está turbio porque no acabo de entenderlo bien del todo.reordena(6); //*Llamamos a esta función que definimos antes y la dotamos con un valor de 6 (que es el máximo de frutas). Esta función tiene verdadero sentido cuando existen multitud de opciones y queremos restringir la actividad a unas cuantas elegidas al azar de entre todas…

Inicia() antes

function inicia() {ajut = 0; silabes_paraula = p_silabes[pagina-1]; paraula = paraules[pagina-1]; iparaula = ""; silabes = "";

clip_imatge.loadMovie("imatges_fruites/"+paraules[pagina-1]+".jpg");

_root.clip_resultat.gotoAndStop(1); ex = "<B><I>Exercici </I></B>"+pagina;

if (pagina<6) { _root.clip_continuar.gotoAndStop(1);

} else {_root.clip_continuar.gotoAndStop(2);

}

stop();}

También hemos de cambiar la función inicia() referenciando las variables al nuevo array permuta:

Ahora quedaría:function inicia() {

ajut = 0;lloc = permuta[pagina-1]; //*Definimos la variable llamada lloc cuyo valor

será el elemento de array permuta ( de ese momento) que ocupe el lugar que surge de restarle 1 al valor de la variable pagina.

silabes_paraula = p_silabes[lloc]; En el campo dinámico que actúa como la variable llamada silabes_paraula ponemos el elemento cuyo lugar es el valor de la variable lloc.

paraula = paraules[lloc]; Idem para la variable paraula, pero estableciendo su valor como el elemento del Array paraules que ocupa el lugar lloc (el valor de lloc)

iparaula = "";silabes = "";clip_imatge.loadMovie("imatges_fruites/"+paraula+".jpg");_root.clip_resultat.gotoAndStop(1);ex = "<B><I>Exercici </I></B>"+pagina;if (pagina<6) {

_root.clip_continuar.gotoAndStop(1);} else {

_root.clip_continuar.gotoAndStop(2);}_root.clip_resposta.oparaula = "";stop();

}

VARIACIONES A ESTE COMPLICADO EJERCICIO Así estaba antes:

Cambiar la ayuda por sonidos externos con el nombre de la fruta…

Ahora:

function ajuda_so() { /* Definimos esta función

19

Page 20: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

function ajuda() {if (ajut<silabes_paraula.length) {

ajut++;ajut_acumulat++;silabes =

silabes+silabes_paraula[ajut-1];}

}

ajut++;ajut_acumulat++;nom = "sons/"+paraula+".mp3"; /* Creamos la variable llamada nom que

contendrá el nombre de un sonido de la carpeta sons/. El sonido tendrá el valor de la variable paraula Ejemplo: nom= sons/tomaquet.mp3

so = new Sound(this); /* Creamos un objeto sonido so.loadSound(nom, 1); /*Cargamos en el objeto sonido el sonido llamado

nom (su valor)so.start(0, 1); /*Ejecutamos ese sonido…

}

En el botón ayuda llamamos a esta función:

on (press) {ajuda_so()

}

20

Page 21: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

Ahora creamos otro clip_resposta que es el de los dos colores descrito antes:Es un clip con dos fotogramas con sendos stop. En cada uno está un campo de texto dinámico como variable llamada oparaula En el 1º la letra saldrá de color azul y en el 2º de color rojo. Para hacer la corrección nos encontramos con dos variables paraula la correcta del Array e iparaula la que se escribe en el cuadro detexto de entrada. Entonces han de compararse las dos cadenas de texto carácter a carácter. Si coinciden las dejaremos igual en la variable oparaula. Si no…

Para que funcione esta actividad debe estar así

Carpeta imatges_fruita (con los nombres exactos):

Idem sonidos:

Modificar la respuesta para que aparezcan, en vez de signos, una cadena de texto que señale los caracteres mal escritos USANDO FUNCIONES DE TEXTO…

function corregir() {oparaula = "";control = 0;m = Math.max(iparaula.length, paraula.length); /*A través del

método Math.max calculamos la longitud de la palabra más larga (iparaula o paraula) a través de length.

for (i=0; i<m; i++) { /* a través de este bucle las comparamos letra a letra. (Utiliza el valor de m calculado antes, para que el bucle se ejecute tantas veces como letras tiene la palabra más larga, m veces)

ip = iparaula.substring(i, i+1); /* Definimos la variable llamada ip cuyo valor es lo que devuelve el método substring (que devuelve una cadena formada por los caracteres comprendidos entre los puntos especificados por los parámetros i e i+1) Es decir devuelve letra por letra de iparaula.

p = paraula.substring(i, i+1); /* Lo mismo pero con paraula

if (ip == p) { /* Si coinciden las dos variables anteriores es decir letra por letra iparaula y paraula

oparaula = oparaula+ip; /* La variable oparaula será su valor (el que tenía) al que se le añade la letra de ese momento de ip

} else { /* Si no coincidenoparaula = oparaula+"_"; /* … se le añade un guión

bajocontrol++; /* aumenta en 1 esa variable con lo que ya

no se ejecuta la función corregir.errors++; /* Idem

}}_root.clip_resposta.oparaula = oparaula; /* El valor del campo de

texto oparaula que está en el clip_oparaula de la película principal será el valor de oparaula

if (control == 0) { /* Si control es =0 (.. que se sigue ejecutando la funcion corregir…)

pas = "Si"; /* …_root.clip_resposta.gotoAndStop(1); /* El clip_resposta ira al

fotograma 1 (color verde de lo que sale en oparaula, porque está bien.)} else {

_root.clip_resposta.gotoAndStop(2); El clip_resposta ira al fotograma 2 (color rojo de lo que sale en oparaula, porque estará mal.)

pas = "No";}

}

En la función inicia() sólo nos queda añadir : function inicia() {

ajut = 0;lloc = permuta[pagina-1];silabes_paraula = p_silabes[lloc];paraula = paraules[lloc];//trace(paraula);iparaula = "";silabes = "";clip_imatge.loadMovie("imatges_fruites/"+paraula+".jpg");_root.clip_resultat.gotoAndStop(1);ex = "<B><I>Exercici </I></B>"+pagina;if (pagina<6) {

_root.clip_continuar.gotoAndStop(1);} else {

_root.clip_continuar.gotoAndStop(2);}_root.clip_resposta.oparaula = ""; /*Para vaciarlo con una nueva fruta*/

21

Page 22: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

stop();}

PÁGINA WEB DINÁMICA CON FLASH-Capa acciones: Ocho fotogramas clave correspondientes a las ocho páginas de la web con la programación correspondiente.-Capa etiquetas: Cada fotograma de estos está “etiquetado” poniendo el nombre de la página en el campo fotograma de propiedades. Así accederemos fácilmente a cada página.-Capa botones: Contiene los ocho botones de acceso a las páginas. La programación de estos botones está en la capa acciones.

-Capa textos variables: Alberga los cuadros de texto dinámicos (cada uno con su nombre correspondiente a la página. Mostrarán los diferentes textos…

-Capa contenedor: Contiene el clip contenidor_mc … que mostrará dinámicamente las imágenes correspondientes a cada página. (Estas imágenes estarán en archivos externos para aliviar el peso de nuestra página)-Capa texto repetido: Contiene los textos dinámicos que se repetirán en cada página web.

En la carpeta donde estén la página html y el fichero swf, ha de estar la carpeta con las imágenes (imatges)…

PRIMER FOTOGRAMA CAPA ACCIONES:// Con este objeto evitamos problemas con el texto en los diferentes navegadoresal utilizar los códigos tradicionales.System.useCodepage = true;my_ss = new TextField.StyleSheet();//agafo el full d'stils de la carpeta estils_cssmy_ss.load("estils_css/full_estils.css");// Creamos una instancia de la clase MovieClipLoader que gestiona las descargas de swf, jpg, gif… imágenesmy_mcl = new MovieClipLoader();// A través del método loadClip se carga pagina1. jpg, que está en esa localización, en el clip contenidor_mc…my_mcl.loadClip("imatges/pagina1.jpg", "contenidor_mc");// Creamos una instancia de la clase LoadVars que controlará la descarga de datosmy_lv = new LoadVars();// Con el método load descargamos ese fichero de texto de la carpeta textmy_lv.load("text/les_meves_variables.txt");my_lv.onLoad = function() {

pagina1_txt.styleSheet = my_ss;pagina1_txt.border = true;pagina1_txt.borderColor = "0xcccccc";pagina1_txt.htmlText =

// Programamos los botones dinámicamente para acceder a las distintas página referenciándolas por el nombre de la etiqueta de cada una.modul1_btn.onRelease = function() {

gotoAndStop("pagina1");};modul2_btn.onRelease = function() {

gotoAndStop("pagina2");};modul3_btn.onRelease = function() {

gotoAndStop("pagina3");};modul4_btn.onRelease = function() {

gotoAndStop("pagina4");};modul5_btn.onRelease = function() {

gotoAndStop("pagina5");};modul6_btn.onRelease = function() {

gotoAndStop("pagina6");};modul7_btn.onRelease = function() {

gotoAndStop("pagina7");};modul8_btn.onRelease = function() {

*Botones:

*Campo de texto dinámico:

*Es un clip transparente

*Campos de texto que no cambia. dinámico que albergará el nombre del instituto etc…

22

Page 23: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

"<estil_web>"+my_lv.pagina1+"</estil_web>";

nom_txt.styleSheet = my_ss;//nom_txt.wordWrap = true;nom_txt.htmlText =

"<estil_web>"+my_lv.nom+"</estil_web>";

curs_txt.styleSheet = my_ss;//curs_txt.wordWrap = true;curs_txt.htmlText =

"<estil_web>"+my_lv.curs+"</estil_web>";};

gotoAndStop("pagina8");};stop();

El clip transparente contenidor_mc nos es más que un clip de película vacío. Tiene un fotograma clave sin nada. Aparece en la película principal como un circulito…

LO APARCO PORQUE ME PARECE DEMASIADO COMPLICADO CON EL LENGUAJE HTML, ESTILOS EN CASCADA ETC…

ENLACES A DOCUMENTOS doc, pdf, swf,o rtf

Desde un TEXTO ESTÁTICO…

Desde BOTONES …

Desde CLIPS DE PELÍCULAS

-Se hace un clic y …

document_doc_btn.onRelease = function() {getURL("document.doc", _blank);

};document_pdf_btn.onRelease = function() {

getURL("document.pdf", _blank);};document_swf_btn.onRelease = function() {

getURL("scroll.swf", _blank);};

document_doc_mcl.onRelease = function() {getURL("document.doc", _blank);

};document_pdf_mcl.onRelease = function() {

getURL("document.pdf", _blank);};document_swf_mcl.onRelease = function() {

getURL("scroll.swf", _blank);};

ENLACES A URL externas … url_btn.onRelease = function() {getURL("http://www.xtec.net", _blank);

};

CREACIÓN DE UNA PIZARRA

El clip pizarra tiene un simple rectángulo con interior blanco y bordes

oscuros con el “origen” en el extremo superior izquierdo (la crucecita). Y también (se pone antes de dibujarlo)

Tiene la siguiente programación://A través de este controlador (onClipEvent) activamos una serie de acciones que se ejecutarán a la velocidad de la película (enterFrame) es decir a 12 veces por segundo (o a como esté)onClipEvent(enterFrame){ //El detector de pulsar el ratón o(nMouse Down) hace que al presionarlo se ejecute esa función

onMouseDown = function () {_root.pinta(color_actual); //Llam a la función pinta con su color actual y estilo

23

Page 24: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

_root.pissarra.linia.moveTo(_xmouse, _ymouse); //A través del método moveTo la posición del dibujo que se hace, se mueve hasta las coordenadas x e y del ratón (será el inicio de la línea)

onMouseMove = function () { _root.pissarra.linia.lineTo(_xmouse, _ymouse);}; //El detector de movimiento del ratón ejecuta esa función que hace en el clip linia se dibuje una línea (lineTO) siguiendo las coordenadas del ratón en cada momento }; onMouseUp = function () { //El detector de soltar el ratón desactiva la función esa definida antes.

onMouseMove = null;};}

La capa que contiene la pizarra está enmascarada y en la capa que enmascara se ha dibujado un rectángulo sin contorno que coincide con el de la pizarra, que será el agujero que dejará ver lo que esté debajo enmascarado. Se pone para limitar el dibujo que salga dentro en la pizarra.

USO DE VARIABLES GLOBALES : Son las que son accesibles desde cualquier objeto de la película sin especificar su camino. Ejemplo: (_global.jugades;)

Programación fotograma 1 capa acciones: //A través del método ese, se crea un clip de película vacío como elemento secundario de un clip de película existente (en este caso dentro de clip pisarra que está en el directorio raiz). Se llamará linia y estrá en el nivel 1_root.pissarra.createEmptyMovieClip("linia", 1);//Definimos la variable global color_actual que contendrá la cadena de texto correspondiente al valor hexadecimal del color negro. Así será negro si no se pulsa ningún color…_global.color_actual = "0x000000";//Creamos la función pinta a la que se le asignará el parámetro de color_actual tipo cadena (string) que hace que el clip vacio linia tenga un estilo de línea de grosor 2 y color negro (color_actual) y total opacidad. pinta = function (color_actual:String) {

_root.pissarra.linia.lineStyle(2, color_actual, 100);};

PROGRAMACIÓN DE LOS BOTONES

on (release) {//Hará que la variable global color coja el color amarillo

_global.color_actual = "0xFFFF00";//La función pinta tendrá ahora el nuevo color_actual

_root.pinta(color_actual);}

Lo mismo para los otros botones: rojo: "0xFF3300" , azul: "0x0066CC" y verde : "0x009900"

"0x000000" para el color que borra blanco.

on(release){_root.pissarra.linia.clear(); //Clear borra cualquier imagen de un clip, sin borrar el

clip (en este caso el clip linia que está en …//Creamos_global.color_actual = "0x000000";

}

APLICACIÓN EDUCATIVA (se aplica lo anterior) Se trata de cliquear cada imagen de fruta y luego su nombre (o al

revés). Si es correcta la acción se dibuja una línea que las une…

Solo dos capas de un fotograma…

24

Page 25: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

En la biblioteca tendríamos:

Cada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el clip se ha metido dentro de él la imagen o la palabra y se les ha convertido en botón) Y cada botón lleva asociada en ellós su programación correspondiente:

Ejemplo botón imagen plátano://Al presionar el botónon (press) {

_root.controlb = 6; //Se define una variable en la película principal llamada controlb que tendrá como valor 6

if (_root.controla == _root.controlb) { //Si el valor de la variable control-a de la película principal es el mismo que el de la variable control-b

//Llamamos a la función esa que dibujará la línea entre esos parámetros que son las posiciones de amos clip de la fruta plátano.

_root.dibuixa_linia(posxa6, posya6, posxb6, posyb6);

}}

Ejemplo botón palabra plátano://Análogo a lo de la izquierda…on (press) {

_root.controla = 6;if (_root.controla == _root.controlb) {_root.dibuixa_linia(posxa6, posya6, posxb6, posyb6);}

}

Programación de cada clip de imagen (ejemplo plátano)//A través de este controlador (onClipEvent) activamos una serie de acciones que se ejecutarán cuando se descargue el clip (load)onClipEvent (load) {//Se grabán las posiciones (this._x y this._y) a través de las coordenadas del clip de la imagen (x e y) La propiedad this hacer referencia al clip en el que nos encontramos escribiendo la programación. Esta posición se graba en unas variables globales (a las que se accede desde cualquier punto y nivel de la película) y a las que hemos llamado nosotros, voluntariamente, como está en negro. (Ejemplo: posxb6 ->Abreviatura

Programación de cada palabra (ejemplo plátano)//Análogo a lo de la izquierda…onClipEvent (load) {

_global.posxa6 = this._x;_global.posya6 = this._y;

}

Es un texto dinámico (que podría haber sido estático porque no hace nada).

Todas las frutas igual.

Y su correspondiente programación asociada al clip (en él).

Todas las palabras igual.

¡Fijaros!: EL plátano b6 y la palabra plátano a6… (en el nombre de las instancias).

ESTO ES SÓLO PARA LA VERSIÓN MÁS SOFISTICADA:

En la escena (aunque fuera del escenario) están estos dos clip con su correspondiente programación. El primero no tiene nombre de instancia y el segundo se llama linia

25

Page 26: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

de posición x de b6 (el nombre del botón)_global.posxb6 = this._x;_global.posyb6 = this._y;

}

PROGRAMACIÓN DE LA CAPA ACCIONES////Creamos la función dibuixa_linea (con los parámetros ax, ay, bx y by) que hará…function dibuixa_linia(ax, ay, bx, by) {

_root.linia._visible = false; //De momento el clip linia de la película principal estará invisible transparencia total)

_root.lineStyle(2, 0x0000CC, 100); //Se configura el método lineStyle (estilo de línea) con grosor 2, color azul y visibilidad total), para cuando se le llame

_root.moveTo(ax, ay); //Con el método moveTo, definimos las coordenadas de inicio moviéndonos ahí ..

_root.lineTo(bx, by); //Con el método lineTo, se dibuja una línea (aplicando el estilo definido anteriormente) desde la posición dónde se esté (marcada ya por moveTo) hasta donde indican sus parámetros (bx y by)}stop();

Se puede SOFISTICAR más el ejercicio haciendo que al clicar la primera vez en uno de los botones, se vaya ya dibujando la línea conforme se mueve el cursor por donde y hasta donde vaya,y si vuelve a cliquear en el lugar correcto, dibujará la línea entera y fija.. Para ello cambiamos la programación de los botones de los clip…

Ejemplo botón imagen plátano://Al presionar el botónon (press) {

_root.controlb = 6; //Se define una variable en la película principal llamada controlb que tendrá como valor 6

_root.linia._visible = true; //El clip línea se vuelve visible_root.linia._x = _root._xmouse; //Iguala la posición inicial x

del clip linia a la del ratón (ambos en el directorio principal)_root.linia._y = _root._ymouse; //…_root.x = _root._xmouse; //La variable x adquiere el valor de

la coordenada x del ratón ( Se utiliza en el clip accions…)_root.y = _root._ymouse; //…if (_root.controla == _root.controlb) {

_root.linia._visible = false;//Llamamos a la función esa que dibujará la línea

entre esos parámetros_root.dibuixa_linia(posxa6, posya6, posxb6,

posyb6);}

}

Ejemplo botón palabra plátano:

on (press) {_root.controla = 6;_root.linia._visible = true;_root.linia._x = _root._xmouse;_root.linia._y = _root._ymouse;_root.x = _root._xmouse;_root.y = _root._ymouse;if (_root.controla == _root.controlb) {

_root.linia._visible=false;//trace(posxa1+" "+posya1+" "+" "+posxb1+" "+posyb1);_root.dibuixa_linia(posxa6, posya6, posxb6, posyb6);

}}

Ahora en la biblioteca tendríamos:

26

Page 27: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

Además hay un clip (el clip accions) que no se ve en el escenario que tiene esta programación.

onClipEvent (load) { //El controlador (onClipEvent) hace que al cargarse (load) este clip se ejecutará

_root.linia._visible = false; //Que el clip línea no se vea}onClipEvent (enterFrame) { //El controlador hace que a la velocidad de los fotogramas las escala horizontal y vertical) del clip linia tengan un valor igual al valor de la posición del ratón menos el valor de la variable x . Es decir el clip linea tendrá una longitud de x e e igual a la diferencia entre donde esté el ratón y el valor de x e y. Esto servirá para que al pulsar un clip (de imagen o palabra de fruta ), se ejecuten las acciones del botón coprrespondiente (entre ellas se igualarán ¿???????????

_root.linia._xscale = _root._xmouse-_root.x;_root.linia._yscale = _root._ymouse-_root.y;

}

ARRASTRAR Y SOLTAR CON hitTest

El clip nota es la bolita negra que lleva, dentro, una instancia del clip zona activa.

El clip zonaActiva es un simple rectángulo que se pone en el clip nota con alfa 0% (para no verse) con el

nombre de instancia zonaActiva

El clip BarraSensible es un rectángulo del que instancias suyas (con alfa 0%) y nombres correspondiente, se sitúan encima de las líneas del gráfico del pentagrama…

En este caso la es la instancia llamada mi_mc (la nota mi) que se ha situado encima de la segunda línea empezando por abajo (ver pentagrama).

El gráfico pentagrama es tan solo un dibujo que hace de fondo.

27

Page 28: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

LA PROGRAMACIÓN

x1 = n1._x;

y1 = n1._y;

n1.onPress = function() {

this.startDrag();

};

n1.onRelease = function() {

if (n1.zonaActiva.hitTest(_root.sol_mc)) {

this.stopDrag();

this._x = 153;

this._y = 200;

} else {

this.stopDrag();

this._x = x1;

this._y = y1;

}

};

En el primer fotograma de la capa acciones ponemos:

/* FIJAR LA POSICION INICIAL DE LAS NOTITAS: Las notas estan ahora alineadas en la escena; necesitamos fijar

sus coordenadas actuales para que sepan a donde volver en el caso de error al soltar. Esta sección fija estos valores*/

// Guardamos como x1 e y1 el valor de la propiedad _x e _y de la primera nota n1. (_x e _y son las coordenadas del clip respecto del escenario).

x1 = n1._x;

y1 = n1._y;

// lo mismo para n2

x2 = n2._x;

y2 = n2._y;

//Análogo resto notas…

// DEFINIMOS LA FUNCION QUE PERMITE ARRASTRAR LA NOTA n1

n1.onPress = function() {

this.startDrag();

};

// DEFINIMOS LA FUNCION QUE COMPRUEBA SI LA PRIMERA NOTITA ACIERTA O NO

n1.onRelease = function() {

/*Se comprueba con hitTest si la instancia de zonaActiva que está dentro de la instancia de la nota n1, entra en contacto con la instancia llamada sol_mc que está sobre el pentagrama de la película principal*/

Si es que si...*/

if (n1.zonaActiva.hitTest(_root.sol_mc)) {

//se deja de arrastrar la notita

this.stopDrag();

//se coloca centrada en su sitio, que hemos tenido la precaución de averiguar al hacer el juego (buscamos las coordenadas de dónde queremos que se sitúe mirando en el panel de información…

this._x = 153;

this._y = 200;

//Si es que no...

} else {

28

Page 29: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

//También se deja de arrastrar

this.stopDrag();

//pero la bolita vuelve al sitio del origen que definimos al principio con las variables x1 e y1, que son las coordenadas propias (donde está situada la nota al comenzar) de la instancia n1 .

/*Le decimos que la coordenada _x e _y del clip en el que estamos (this) valga como x1 e y1 , (que era el valor de inicio)*/

this._x = x1;

this._y = y1;

}

};

OTRO TIPO

*La escena consta de tres capas de las cuales sólo nos interesa la primera que contiene cuatro instancias de clip de películas:

-Una instancia llamada cuadrado ( en propiedades) del clip cuad

-Una instancia llamada circulo del clip circ

-Una instancia llamada cuadrado_movil del clip cuad _arrastre

-Una instancia llamada circulo_movil del clip circulo_arrastre

OBJETOS FIJOS (hasta donde hay que llevar los objetos móviles)

Cuad es un clip que tiene en su interior (pulsa doble clic en ella) un gráfico de cuadrado y encima de él una instancia llamada centro del clip inv .

Circ es análogo a cuad ya que tiene lo mismo pero cambiando el grafico cuadrado por un circulo.

29

Page 30: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

Inv es un botón (miralo en la biblioteca) que tiene sólo un cuadrado.

OBJETOS MÓVILES (Son los que arrastramos para llevarlos a la zona de los fijos)

cuadrado_movil es una instancia de cuad _arrastre

cuad _arrastre consta de un boton (un cuadrado) y sobre él una instancia llamada centro del clip inv

circulo_movil es análogo a lo anterior …

LA PROGRAMACIÓN

La instancia cuadrado_movil tiene sobre él en la ventana de acciones:

Lo que está en azul es porque Flash reconoce ese lenguaje propio de él (cada palabra hace algo ..) y lo que está en verde entrecomillado Flash lo colorea así porque lo reconoce como texto…

onClipEvent (load) {

var x = this._x;

var y = this._y;

}

onClipEvent (enterFrame) {

30

Page 31: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

if (this.soltar == "si") {

distancia_x = Math.round((Number(x)-Number(this._x))/2);

distancia_y = Math.round((Number(y)-Number(this._y))/2);

if (Math.abs(distancia_x)<=1 and Math.abs(distancia_y)<=1) {

} else {

this._x = this._x+distancia_x;

this._y = this._y+distancia_y;

}

}

}

Toda esta programación no sé si es conveniente explicártela ya que yo la he utilizado siempre sin entenderla. Esta programación siempre la copias y la pegas sobre la instancia del clip se mueve. Es siempre la misma da igual como se llamen los clips.

El intento de explicación (lo de color gris:

onClipEvent (load) { // OnClipEvent es un controlador de clips que ejecuta las acciones de debajo cuando el clip se carga (load) en la película (Cuando aparece en el escenario; Aquí siempre está..)

var x = this._x; // Con var creamos una variable llamada x que “memoriza” la coordenada _x del clip en el que estamos (this al clip en el que estamos escribiendo esto)) Es decir, el clip ocupa un valor _x en el escenario y ese valor se lo memoriza x

var y = this._y; // Analogo pero con y

}

onClipEvent (enterFrame) { // Ahora OnClipEvent ejecuta las acciones de debajo, pero a la velocidad (enterframe) de los fotogramas de la película. Como la película va a 12 fotogramas por segundo. Ejecuta lo de abajo 12 cada segundo.

if (this.soltar == "si") { // Si (if) la variable soltar (que se ha definido en la programación del boton que está en cuad_arrastre) vale si (es una cadena de texto , es decir son la letra s y la i , se entrecomillan para incicar a flash que son texto)

// Lo siguiente son “funciones que manejan datos matemáticos)” (Math)de flash que hallan la mitad de la diferencia (la resta) de los valores memorizados por X e Y al principio (antes de moverse) menos los valores de x e y en la posición actual (el sitio donde se le ha arrastrado. Esta resta se hace con valores enteros redondeados (round). Number indica a flash que lo del paréntesis son números.

Entonces, si soltar vales “si”, el valor de la mitad de esta diferencia es asignado a las varibles (definidas así por nosotros) distancia_x y distancia_y.

31

Page 32: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

distancia_x = Math.round((Number(x)-Number(this._x))/2);

distancia_y = Math.round((Number(y)-Number(this._y))/2);

// Si el valor absoluto de esas variables es menor o igual a 1, es decir apenas se ha movido no ocurre nada , porque no dice que ocurra nada…

if (Math.abs(distancia_x)<=1 and Math.abs(distancia_y)<=1) {

} else { // Si no ocurre eso porque se ha arrastrado lejos… La nueva posición del clip this_x será el resultado de sumar la antigua y los valores distancia_x , distancia_y, que harán que el clip se acerque a sus posiciones iniciales x e y. (Es decir acerca el clip a la mitad de la distancia en que se encuentra . Posición inicial this._x más la mitad de donde se ha arrastrado, con lo que se acerca a la mitad…)). Este cálculo vuelve a repetirse, como bien has expresado, a una velocidad de 12 cálculos por segundo hasta que distancia_x es menor que 1. El resultado es que el clip vuelve en 3 o 4 pasos, dando más ilusión de continuidad

this._x = this._x+distancia_x;

this._y = this._y+distancia_y;

}

}

}

El botón que está dentro del cuadrado_movil tiene sobre él en la ventana de acciones:

on (press) { // Al presionar ese botón

soltar = "no"; // Creamos esa variable y le damos el valor de no (son las letras de texto n y o)

this.startDrag(); // A través de la función predeterminada de flash, startDra,g hacemos que el clip sea arrastrado por el puntero del ratón…

}

on (release, releaseOutside) { // Al soltar el ratón (dejar de pulsarlo)

if (centro.hitTest(_parent.cuadrado.centro)) { // Averigua si (if) el clip centro (de dentro del botón del objeto móvil ) entra en contacto (hitTest) con el clip centro del clip cuadrado que está en el escenario principal (pone _parent , que hace referencia al “padre donde esté el clip denominado cuadrado, pero podrían haber puesto _root que hace referencia a la película principal directamente)

Entonces, si ocurre esto

soltar = "centro"; // La variable soltar tendrá como valor esa cadena de letras. Ni “si” ni “no”

Y las posición del clip en el que estamos (el cuadrad donde está el botón en cuestion) se ira al sitio de la posición donde está el clip llamado cuadrado (el fijo) .

32

Page 33: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

this._x = _parent.cuadrado._x;

this._y = _parent.cuadrado._y;

} else { // Si no ocurre lo de entrar en contacto …

soltar = "si"; // LA variable soltar valdrá “si” con lo que se ejecutará la programación anterior que hará que vuelva a su posición original.

}

stopDrag(); // Esto hace que ya no sea arrstrado el clip donde está el botón..

}

Perdona pero esto es lo que soy capaz de explicar (seguro que alguien nos ayuda). Lo importante es lo que te pongo en rojo que es lo que varía de unos ejercicio a otros.

Tú siempre creas los objetos fijos y los móviles. Les metes una instancia del clip inv y la llamas centro . Los botones no necesitan nombre, Pero si las instancias que los objeto sfijos y moviles.

Luego copias y pegas la programación. Ya sabes que la de las instancias de los objetos móviles se pegan y se dejan tal cual. Y a la de los botones que estan dentro de los objetos móviles hay que cambiar los nombres para colocar esos nombres cuadrado o círculo por los que utilices.

IMPEDIR QUE SE MUEVA LOS ACIERTOS DEL ARRASTRE

Supongamos que tienes mapaNavarra y nombreNavarra que se han de relacionar. Tu código será algo parecido a

x=nombreNavarra_x;

y=nombreNavarra_y;

nombreNavarra.onPress = function() {

this.startDrag();

};

nombreNavarra.onRelease = function() {

if (nombreNavarra.zonaActiva.hitTest(_root.mapaNavarra)) {

this.stopDrag();

this._x = 153;

this._y = 200;

} else {

this.stopDrag();

this._x = x1;

this._y = y1;

33

Page 34: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

}

};

Para hacer lo que quieres ( QUE LOS ACIERTOS NO SE DEJEN ARRASTRAR) yo introduciria una variable de la siguiente forma (en rojo y azul lo nuevo)

x=nombreNavarra_x;

y=nombreNavarra_y;

// Introducimos una variable que indica si se ha acertado. Valor inicial ‘false’

aciertoNavarra =”false”;

nombreNavarra.onPress = function() {

// Condicionamos la acción al valor de la variable. Solo funciona con ‘false’

//Ojo, utilizamos dos signos igual porque es una comprobación, no una asignación de valor

if(aciertoNavarra= =”false”){

this.startDrag();

}

};

nombreNavarra.onRelease = function() {

if (nombreNavarra.zonaActiva.hitTest(_root.mapaNavarra)) {

this.stopDrag();

this._x = 153;

this._y = 200;

// La variable cambia de valor para bloquear la acción startDrag

aciertoNavarra=”true”;

} else {

this.stopDrag();

this._x = x1;

this._y = y1;

}

};

ARRASTRAR Y SOLTAR DEFINITIVO

*Sin problemas de que se dejen arrastrar los ya colocados , o cuenten como intento el pulsar sobre los colocados etc...

*Este ejercicio trata de que se arrastren unos gusanos sobre unas hojas de morera (al pasar por el gusano o por las hojas, suenan las notas correspondientes que hay que asociar (do con do..etc)

34

Page 35: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

posX = new Array(); /*Definimos estas matrices que se llamarán así (posX y posY). Van a albergar los valores de la posiciones iniciales de los gusanos.*/

posY = new Array();

nombreGus = new Array(); /*Definimos esta matriz con el nombre de nombreGus que albergará los nombres de las instancias de los gusanos*/

nombreGus = ["0", "gusanodo", "gusanore", "gusanomi", "gusanofa", "gusanosol", "gusanola", "gusanosi", "gusanodoagudo"]; /*Definimos los elementos de esa matriz*/

for (i=0; i<9; i++) { /*Con for iniciamos una secuencia de valoración de lo del paréntesis . (La i es una variable interna de for que es la que va adquiriendo los valores. Inicialmente vale 0, y se va incrementando en una unidad (i++) siempre que sea menor que 9 (ya que el número de instancias del gusano es 8 y el “0” siempre es el primer elemento de la matriz (a la fuerza). Es algo así como que for, ha generado ocho valores de i (además del cero) (0, 1,2,3,4,5,6,7 y 8)

posX[i] = _root[nombreGus[i]]._x; /*Asociamos las matrices posX y posY a los valores que se han generado en for, con lo que todas las posiciones _x e _y iniciales de todas las instancias de los gusanos de la película principal (_root[nombreGus[i]]) , se memorizarán en las matrices posX y posY (posX[0], posX[1], posX[2]... y posY[0], posY[1], posY[2]... etc. De esta forma, y ahorrándonos programación, tenemos grababas para la instancia del gusanodo, cuyo valor en la matriz nombreGus es nombreGus[1], las posiciones posX[1] y posY[1]... porque los asociamos a través del valor i... y análogo con el resto de gusanos....

posY[i] = _root[nombreGus[i]]._y;

}

var aciertogusanodo = "false"; /*Definimos la variable aciertogusanodo y le damos el valor “false” (que es sólo texto) cuya utilidad se explica después...*/

var aciertos = 0; /*Definimos estas variables que contabilizarán los aciertos y los intentos. Sy valor inicial será cero.

var intentos = 0;

function mostrarResultado() { /*Creamos esta función con el nombre mostrarResultado que hará que en un texto dinámico que actúa como variable llamada texto Contador salga el texto verde ( en negrita <b>, con tamaño letra size=’26’... etc...) con el valor numérico de las variables aciertos e intentos en el momento en que se llama a la función...*/

textoContador = "<b>Has acertado<font size='26'> "+aciertos+"</font> de<font size='26'> "+intentos+" </font>intentos</b>";

if (aciertos == 8) { /*Creamos la condición de que si hemos acertados todos los gusanos a sus respectivas hojas...

gotoAndStop("final"); /*La película irá al fotograma etiquetado como “final”... donde sale un mensaje...*/

}

}

mostrarResultado(); /*Llamamos a esta función para que se ejecute...*/

/*Ahora viene todo lo relativo al primer gusano... para los demás es ana´logo y no lo pongo para que sea el manual más manejable...*/

gusanodo.onPress = function() { /*Creo que esta función se puede quitar ya que lo que ella hace lo hace también la función siguiente.*/

this.startDrag();

};

gusanodo.onPress = function() { /*Definimos esta funcíon para que al presionar sonbre la instancia llamada gusanodo

if (aciertogusanodo == "false") { Si se cumple el valor de esa variable ( que no se ha colocado el gusano en su hoja...)

this.startDrag(); /*El gusano (la instancia) se deja arrastrar...*/

}

};

gusanodo.onRollOver = function() { /* Esta function hace que al pasar el puntero por encima la instancia del gusanodo, suene el sonido notaDo

notaDo.start();

35

Page 36: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

};

dosensible.onRollOver = function() { /*Idéntico a lo anterior pero además el clip de la hoja (cuya instancia se llama dosensible y que está parado en el fotograma 1 con un stop) va al fotograma 2 y se reproduce el clip entero hasta repetirse y parar otra vez en el 1. (El clip hace que la hoja aumante y disminuya progresivamente de tamaño. Este clip está con una trasparencia hasta el 70%)

notaDo.start();

this.gotoAndPlay(2);

};

gusanodo.onRelease = function() { /*Con esta función, al soltar el ratón que ha hecho clic en la instancia del gusanodo ( que se supone que se ha arrastrado...*/

if (aciertogusanodo == "false") { /*Si se cumple el valor de esa variable (que no ha habido acierto hasta ahora)*/

if (gusanodo.zonaactiva.hitTest(_root.dosensible)) { /*Y si se tocan las dos intancias ( la zona activa que lleva dentro del clip el gusano y dosensible)

this.stopDrag(); /*Dejará de poder arrstrarse*/

this.gotoAndStop("bien"); /*El clip va al fotograma dos (etiquetado como “bien”) donde hay clip donde el gusano se come la hoja.

_root.dosensible._visible = 0; /*La hoja se hace invisible. (habría que poner en la función repetir que la hoja se volviera a ver.

this._x = 539; /*La instancia del gusano se colocará en esas coordenadas que hemos previsto dentro de la hoja del acierto.

this._y = 337;

aciertogusanodo = "true"; /*Cambiamos el valor de esta variable, así, al no valer “false” ya no podrá ejecutarse esta misma función en la que estamos.*/

if (aciertos<8) { /*Además si el valor de los aciertos es inferior a 8 (es de cir, que dan gusanos por colocar)...*/

aciertos++; /*Incrementamos en una unidad los valores de estas variables..*/

intentos++;

}

mostrarResultado(); /*Llamamos a esta function para que se ejcute y ponga los nuevos valores de aciertos e intentos…

} else { /*Si no ocurre nada de lo anterior…*/

this.stopDrag(); /*El gusano déjà de poder arrastrarse

if ((this._x != posX[1]) && (this._y != posY[1])) { /* Si la posición actual (this._x e this._y) es diferente (¡=) a la memorizada al inicio posX[1 ] y posY[1]..

this._x = posX[1]; /* Se colocará el gusano en la posición inicial....*/

this._y = posY[1];

intentos++; /*Esta variable se incrementa en una unidad...*/

}

mostrarResultado(); /*Llamamos a esta function para que se ejcute y ponga los nuevos valores de aciertos e intentos…

}

}

36

Page 37: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

};

Si queremos que cuando el gusano acierte haga algo:

*1ºEl clip del gusano son varios fotogramas clave que hacen que se mueva. Por ello creamos otro clip y dentro del nuevo, este clip lo anidamos en el fotograma1 (ponemos stop)

*En un segundo fotograma insertamos un clip con lo que queramos que haga el gusano (otro stop) Y etiquetamos este fotograma dos(por ejemplo “efecto”)

/*Lo mismo para los demás gusanos...

repetir.onRelease = function() { /*Con esta función reiniciamos todas las variables...*/

intentos = 0;

aciertos = 0;

aciertogusanodo = "false"; /*Como esta los gusanos de las otras notas...*/

_root.dosensible._visible = 1; /*La hoja se vuelve a ver

for (i=0; i<9; i++) { /* Gracias al valor de i

_root[nombreGus[i]]._x = posX[i]; /*LLevamos todos los gusanos a su posición memorizada al principio.

_root[nombreGus[i]]._y = posY[i];

}

mostrarResultado(); /*Esta función mostrará ahora los contadores a O...*/

gotoAndStop("juego"); /*La película va al fotorama etiquetado como juego que es el primero(por si estamos en el fotograma2...*/

};

mp3Do = "do.mp3"; /*Definimosla variable que denominamos mp3Do como el texto entrecomillado...Este texto coincide con el nombre de vinculación del sonido Do*. (Se vincula dando con el noton derecho sobre el sonido, escogiendo vinculación... del menú que sale /

notaDo = new Sound(); /*Creamos un Nuevo objeto de sonido (nos permitirá utilizar sus propiedades para manejar los sonidos...)

notaDo.attachSound(mp3Do); /*Con el método attachSound asociamos el objeto de sonido creado (notaDo) con la variable mp3Do ( en la biblioteca está el sonido do al que gracias a la vinculación , para su utilización en Action Script, se exporta con el nombre do.mp3).

Y en la programación de la instancia del gusanoDo, se ha puesto (notaDo.start();), que hace que suen el sonido Do ...

37

Page 38: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

TRABAJAR CON ALEATORIEDAD

Este ejercicio es muy interesante porque aparecen en el ejercicio instancias de clip asociadas a clips vacíos (así no hace falta que estén desde el principio). Con ello podemos hacer que aparezcan aleatoriamente distintos tamaños de un rectángulo.

También se definen variables, campos de texto dinámicos… que no están en un principio en el escenario y que a través de la programación, se hace que aparezcan…

Imagen 1

El ejercicio muestra aleatoriamente rectángulo de distintas dimensiones para calcular su perímetro y área. Permite corregir, continuar (si se hace bien) y acabar para salir.

Consta de dos capas: la primera con acciones (el fotograma 2º es un Stop();

La otra, en el primer fotograma está la imagen 1 y en el segundo hay un cuadro dinámico como variable llamada resum

-El botón circle es de donde salen las instancias de los tres botones del escenario

-El clip_contenidor es de donde sale la instancia llamada clip_contenidor (va a albergar los rectángulos aleatorios)

-El clip_dades es un texto dinámico que hace de variable llamada d. Además esta vinculado (para ser exportado y utilizado por actión script; con botón derecho sobre vinculación) con su mismo nombre.

El clip perimsuperf es identico al anterior, un texto dinámico que hace de variable llamada d . Idem anterior

-El clip rectangle tiene dentro un simple rectágulo. con su punto de registro (la crucecita) en la esquina superior izquierda.

-El clip desposta t iene dos capas y tres fotogramas. Los fotogramas de la capa acciones solo tiene stop(); para detener la película en cada uno de esos fotogramas cuando sean llamados. Idem…

Texto dinámico como variable llamada ex

Clip_contenidor Le denominamos, en propiedades, de igual forma.

Es un clip vacío

Texto dinámico Sin funcíon, solo son etiquetas informativas.

Botones que al pulsarlos ejecutan las siguientes funciones:

Instancia vinculada dades_a rectangle

Variable llamada d (dentro de dades_a)

Instancia vinculada llamada resposta_perimetre

Variable r dentro de resposta_perímetre

38

Page 39: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

Los otros tres fotogramas son cuadros dinámicos que hacen de variables llamadas r (se diferencian en que el 1º mostrará la letra de color azul, el 2º verde y el 3º roja.

TODA LA INTERACTIVIDAD ESTA EN LA PROGRAMACIÓN DEL FOTOGRAMA 1 DE LA CAPA ACCIONES:

System.useCodepage=true; /*Evita problemas de compatibilidad con los textos en los navegadores…*/

contador_exercicis = 0; /*Creamos esta variable y le damos valor 0*/

errades_perimetre = errades_superficie=0; /*Creamos estas variables y también le damos valor 0*/

_root.clip_contenidor.attachMovie("rectangle", "rectangle", 1); /*A través de attachMovie asociamos un clip de película de la biblioteca al clip_contenidor. El primer parámetro es el nombre de la vinculación, el segundo es el nombre de la instancia del clip ( la instancia no tiene por qué estar en el escenario, ese nombre es sólo para llamarla) y el tercero el nivel en el que se colocará (como papeles cebolla donde se empieza por 0 y no puede haber dos clip en el mismo nivel)*/

function calcula_costats() { /*Creamos esta función con ese nombre… que hará que */

a = random(300)+50; /*Estas variables, que acabamos de crear, tengan un valor aleatorio entre 0 y lo del paréntesis (299) y a eso le suma 50(que supongo que será para que tengan un tamaño mínimo de 50).

b = random(210)+30;

}

39

Page 40: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

function posa_exercici() { /*Creamos esta función con ese nombre… que hará que */

contador_exercicis++; /*Que esa variable definida antes se incremente en 1 (++)

calcula_costats(); /*Llamamos a esa función definida antes para que se ejecute y aparecen así unos valores aleatorios de ay b

while (b>2*a/3 || b<a/2) { /*While es una sentencia que evalúa si se cumple lo del paréntesis . Si se cumple se ejecuta otra vez… en bucle (repeticiones seguidas) hasta que no se cumpla y entonces para el bucle. ¿¿¿???

Lo del paréntesis es: Si la variable b es mayor que el doble de la tercera parte de la variable a, o si la variable b es menor que la mitad de a (una del las dos cosas al menos se deben cumplir)

calcula_costats(); /*Se llama otra vez a la función

}

_root.clip_contenidor.rectangle._xscale = 100*a/250; /*Aumentamos la escala de la instancia llamada rectangle, asociado al clip_contenedor en esa expresión (como 250 es el ancho en píxeles del rectágulo original del clip…¿¿¿???)

_root.clip_contenidor.rectangle._yscale = 100*b/150;

_root.clip_contenidor.attachMovie("clip_dades", "dades_a", 2); /*Asociamos el clip de la biblioteca con nombre de vinculación clip_dades, cuyo nombre de instancia es dades_a y lo ponemos en el nivel 2

_root.clip_contenidor.dades_a._x = a+45; /*El clip llamado dades_a, asociado al clip_contenidor se situará en la posición_x cuyo valor es la variable a más 45 píxels (para que esté 45 píxeles a la derecha del rectángulo),

_root.clip_contenidor.dades_a._y = b/2; /*Análogo a lo anterior para que la posición _y , este a la mitad de b (es decir en medio del lado a)

Ambas expresiones anteriores: Sitúan ese clip en mitad del lado a y separado del rectángulo, para que aparezca… (lo siguiente).

_root.clip_contenidor.dades_a.d = "a ="+a; /*Análogo… para la variable d del clip dades_d….(que es un campo de texto en el que aparecerá el texto: “a=” y el valor de la variable a. Ejemplo a=187)

_root.clip_contenidor.attachMovie("clip_dades", "dades_b", 3); /*Las siguientes 4 expresiones hacen algo análogo a todo lo anterior para poner, en la variable d, del campo de texto dades_b , que está asociada al clip_contenidor, por ejemplo (b= 245)… separado 15 píxeles por abajo del rectángulo y a mitad del largo de a. (ver imagen de arriba con letras en rojo…)

_root.clip_contenidor.dades_b._x = a/2;

_root.clip_contenidor.dades_b._y = b+15;

_root.clip_contenidor.dades_b.d = "b ="+b;

/*Con la siguiente expresión ponemos en la variable llamada ex (que está en la parte superior de la pantalla) , con negrita y cursiva (<B><I> algo parecido a esto : Exercici 5 : Calcula el perímetre i la superfície d'aquest rectangle, donde el 5 es el valor de la variable llamada contador_exercicis.*/

ex = "<B><I>Exercici "+contador_exercicis+"</I></B>: Calcula el perímetre i la superfície d'aquest rectangle";

_root.clip_contenidor.attachMovie("perimsuperf", "perimetre", 4); /*Asociamos… con nombre de vinculación perimsuperf, a la instancia (que no tiene por qué estar en el escenario) la llamamos perímetre, para poder llamarla… y en el nivel 4…

_root.clip_contenidor.perimetre.d = "Perímetre: "; /* En la variable d de la instancia llamada perímetre asociada…. Saldrá ese texto

_root.clip_contenidor.perimetre._x = 50; /* Esa instancia (llamada perímetre en la asociación …) se colocará en horizontal ( x ) igual a 50 píxles.

_root.clip_contenidor.perimetre._y = b+50; /*Y su colocación vertical será lo que mida el lado b más 50 píxeles.

_root.clip_contenidor.attachMovie("perimsuperf", "superficie", 5); /*Análogo a lo anterior… pero ese texto entrecomillado quedará a 50 píxeles en horizontal pero 40 píxeles más abajo en vertical.

_root.clip_contenidor.superficie.d = "Superfície: ";

_root.clip_contenidor.superficie._x = 50;

_root.clip_contenidor.superficie._y = b+90;

_root.clip_contenidor.attachMovie("resposta", "resposta_perimetre", 6); /*Asociamos al clip_contenidor con nombre de vinculación (resposta) y con

40

Page 41: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

nombre a la instancia que vinculamos de (resposta_perimetre) y …6

_root.clip_contenidor.resposta_perimetre.gotoAndStop(1); /*A la instancia de antes la paramos en el fotograma 1

_root.clip_contenidor.resposta_perimetre.r = ""; /*Vaciará el texto dinámico, que es la variable r, de contenido

_root.clip_contenidor.resposta_perimetre._x = 155; /*La instancia resposta_perimetre se colocara en esa posición horizontal ( a la derecha de la instancia perímetre

_root.clip_contenidor.resposta_perimetre._y = b+50; /* Y a su misma altura…

_root.clip_contenidor.attachMovie("resposta", "resposta_superficie", 7);

_root.clip_contenidor.resposta_superficie.gotoAndStop(1); /*Lo mismo de antes pero para la instancia vinculada… respposta_superficie.

_root.clip_contenidor.resposta_superficie.r = "";

_root.clip_contenidor.resposta_superficie._x = 155;

_root.clip_contenidor.resposta_superficie._y = b+90;

perimetre = 2*(a+b); /*Definimos la variable superficie como el resultado de multiplicar por dos la suma de las variables a +b

area = a*b; /*Definimos esa variable como el ….a por b.

control_perimetre=control_superficie=0; /*Creamos estas variables y también le damos valor 0*/

}

posa_exercici(); /*Llamamos a esta función para inicie todo lo programado y aparezca un rectángulo para el cálculo de su …

function corregir() { /*Definimos esta función*/

if (_root.clip_contenidor.resposta_perimetre.r == perimetre) { /*Si el valor de esas dos variables es el mismo : O sea se ha calculado bien el perímetro*/

_root.clip_contenidor.resposta_perimetre.gotoAndStop(2); /*La película en la instancia desposta_perímetre irá al fotograma 2 (letra verde…)

control_perimetre = 1; /*Y esa variable valdrá 1

} else { /*Si no ocurre eso…

_root.clip_contenidor.resposta_perimetre.gotoAndStop(3); /*Lo de antes …irá al fotograma 3 (color rojo) porque estrá mal calculado.

errades_perimetre++; /*Esa variable se incrementara en 1

control_perimetre = 0; /*Y esa otra valdrá 0

}

if (_root.clip_contenidor.resposta_superficie.r == area) { /*Lo mismo pero para el área…

_root.clip_contenidor.resposta_superficie.gotoAndStop(2);

control_superficie = 1;

} else {

_root.clip_contenidor.resposta_superficie.gotoAndStop(3);

errades_superficie++;

control_superficie = 0;

}

}

function continuar() { /*Definimos está función

control = control_perimetre*control_superficie; /*Definimos esa variable que “mira” el producto de las variables control de l perímetro y área if

41

Page 42: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

(control == 1) { /*Si vale 1 (que querrá decir que las dos están bien calculadas ya que valen 1 si se hacen bien tal y como se han definido anteriormente)

posa_exercici(); /*Se llama a esa funcíon para que ponga otro rectángulo …

} else { /* Si no…

stop(); /*La película se para … hasta que lo hagamos bien …o lo dejemos.

}

}

function acabar() { /*Definimos esta función

control = control_perimetre*control_superficie; /*Igual a lo de antes

if (control == 1) { /*Igual que antes

gotoAndStop(2); /*Nos lleva al fotograma 2 de la película principal donde está el cuadro de texto dinámico que hace de variable llamada resum

resum = "Has fet <B>"+contador_exercicis+"</B> exercicis<BR><BR>Amb <B>"+errades_perimetre+" </B> errades en el càlcul dels perímetres<BR><BR>I amb <B>"+errades_superficie+"</B> errades en el càlcul de les superfícies"; /*En resum aparece esta combinación de texto y valor de las variables… en negrita y cursiva algunas cosas…

} else { /*Si no…

stop(); /* Seguimos en el sitio…

}

}

Stop(); /*Nos paramos en el fotograma 1 de la película principal que es en donde está toda esta programación.*/

LO MISMO QUE ANTES PERO LA FIGURA EN VEZ DE ESTAR DIBUJADA Y JUGAR CON SU ESCALA, SE GENERA DINÁMICAMENTE

Se quita lo que está en rojo y se añade lo de la derecha System.useCodepage=true;

contador_exercicis = 0;

errades_perimetre=rades_superficie=0; _root.clip_contenidor.attachMovie("rectangle", "rectangle", 1);

function calcula_costats() {

a = random(300)+50; .

b = random(210)+30;

}

function posa_exercici() {

contador_exercicis++;

calcula_costats();

while (b>2*a/3 || b<a/2) {

_root.clip_contenidor.clear(); /*Clear borra el clip que tenga el clip_contenidor.

_root.clip_contenidor.beginFill(0x0033ff, 60); /*Con beginFill (inicio relleno) se inicia, con las siguientes acciones un trazado que se cerrará y se rellenará con ese color y esa transparencia.

_root.clip_contenidor.lineStyle(3, 0x0066cc, 100); /*Con lineStyle especificamos un estilo de línea ( con ese grosor, color y visibilidad total) para las siguientes llamadas…

_root.clip_contenidor.moveTo(0, 0); /* Se marca el comienzo del dibujo en esa coordenada dentro del clip_contenidor

_root.clip_contenidor.lineTo(a, 0); /* Se dibuja una línea con el estilo definido antes (En este caso es horizontal y va desde x=0, definido antes hasta x=a

_root.clip_contenidor.lineTo(a, b); /* Análogo pero vertical desde donde acaba antes ,x=a hasta y= b… Lo de después cierra el rectángulo

_root.clip_contenidor.lineTo(0, b);

_root.clip_contenidor.lineTo(0, 0);

42

Page 43: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

calcula_costats(); /*Se llama otra vez a la función

}

_root.clip_contenidor.rectangle._xscale = 100*a/250;

_root.clip_contenidor.rectangle._yscale = 100*b/150;

_root.clip_contenidor.attachMovie("clip_dades", "dades_a", 2);

_root.clip_contenidor.dades_a._x = a+45;

_root.clip_contenidor.dades_a._y = b/2;

_root.clip_contenidor.dades_a.d="a="+a;_root.clip_contenidor.attachMovie("clip_dades", "dades_b", 3);

_root.clip_contenidor.dades_b._x = a/2;

_root.clip_contenidor.dades_b._y = b+15;

_root.clip_contenidor.dades_b.d = "b ="+b;

ex = "<B><I>Exercici "+contador_exercicis+"</I></B>: Calcula el perímetre i la superfície d'aquest rectangle";

_root.clip_contenidor.attachMovie("perimsuperf", "perimetre", 4);

_root.clip_contenidor.perimetre.d="Perímetre:";_root.clip_contenidor.perimetre._x = 50;

_root.clip_contenidor.perimetre._y=b+50; _root.clip_contenidor.attachMovie("perimsuperf", "superficie", 5); _root.clip_contenidor.superficie.d = "Superfície: ";

_root.clip_contenidor.superficie._x = 50;

_root.clip_contenidor.superficie._y = b+90;

_root.clip_contenidor.attachMovie("resposta", resposta_perimetre", 6);

_ root.clip_contenidor.resposta_perimetre.gotoAndStop(1); _root.clip_contenidor.resposta_perimetre.r=""; _root.clip_contenidor.resposta_perimetre._x=155; _root.clip_contenidor.resposta_perimetre._y=b+50;_root.clip_contenidor.attachMovie("resposta", resposta_superficie",

7);

_root.clip_contenidor.resposta_superficie.gotoAndStop(1); _root.clip_contenidor.resposta_superficie.r = "";

_root.clip_contenidor.resposta_superficie._x = 155;

_root.clip_contenidor.resposta_superficie._y = b+90;

perimetre = 2*(a+b);

area = a*b;

control_perimetre=control_superficie=0;

}

posa_exercici();

function corregir() {

_root.clip_contenidor.endFill; /*endFill (fin del relleno) Acaba todo lo que se incio con beginFill, rellenando la figura.

43

Page 44: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

if (_root.clip_contenidor.resposta_perimetre.r == perimetre) {

_root.clip_contenidor.resposta_perimetre.gotoAndStop(2);

control_perimetre = 1

} else {

_root.clip_contenidor.resposta_perimetre.gotoAndStop(3);

errades_perimetre++;

control_perimetre = 0;

}

if (_root.clip_contenidor.resposta_superficie.r == area) {

_root.clip_contenidor.resposta_superficie.gotoAndStop(2);

control_superficie = 1;

} else {

_root.clip_contenidor.resposta_superficie.gotoAndStop(3);

errades_superficie++;

control_superficie = 0;

}

}

function continuar() {

control = control_perimetre*control_superficie;

if (control == 1) {

posa_exercici();

} else {

stop();

}

}

function acabar() {

control = control_perimetre*control_superficie;

if (control == 1) { /*Igual que antes

gotoAndStop(2

resum = "Has fet <B>"+contador_exercicis+"</B> exercicis<BR><BR>Amb <B>"+errades_perimetre+" </B> errades en el càlcul dels perímetres<BR><BR>I amb <B>"+errades_superficie+"</B> errades en el

44

Page 45: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

càlcul de les superfícies";

} else {

stop();

}

}

Stop();

PARA OTRAS FIGURAS

Para otras figuras nos metemos ya en conceptos matemáticos más profundos (Hallar vértices con expresiones algebráicas o paramétricas…)

Vamos a intentar un triángulo…

En el escenario tenemos solamente el clip_contenidor vacío y una instancia sin nombre del botón del triangulito.

En el primer fotograma ponemos:

_root.contenidor.attachMovie("contenidor", "origen", 1); /*Asociamos…. La vinculación (contenidor) con nombre de instancia (origen) al nivel 1…

_root.contenidor.attachMovie("contenidor", "altura", 2); /*Idema (altura)…

function dibuixa_altura() { /*…

_root.contenidor.altura.clear(); /*Borramos lo que halla en el clip_contenidor

_root.contenidor.altura.lineStyle(2, 0xFF0000, 100); /*… color rojo

_root.contenidor.altura.moveTo(0, 0); /*...

_root.contenidor.altura.lineTo(0, -b); /*…

}

function calcula_dades() { /*Creamos esta función que hace que...

a1 = random(150)+30; /*Esta nueva variable, que creamos ahora tenga un valor aleatorio entre 30 y 179

a2 = random(150)+30; /*...

b = random(120)+40; /* ...

a = a1+a2; /* Creamos la variable a que valdrá la suma de las dos anteriores.

/*En realidad hemos definido el lado horizontal del triángulo a través de los dos segmentos en que lo divide la altura.

on (press){

dibuixa_triangle()

} /*Llama a esa función.

45

Page 46: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

}

function dibuixa_triangle() { /*Definimos esta función para dibujar el triángulo...

_root.contenidor.origen.clear();/* Igual que para el rectángulo...

calcula_dades();

_root.contenidor.origen.beginFill(0x0033CC, 60); /*... color azul.

_root.contenidor.origen.lineStyle(2, 0x0033CC, 100);

_root.contenidor.origen.moveTo(-a1, 0); /*Tomando como inicio esa coordenada, que es el vértice inferior izquierdo (Es negativo porque hemos tomado, para dibujar la altura, como inicio de coordenadas (0,0), el punto inferior de la altura)

_root.contenidor.origen.lineTo(0, -b); /*...se empieza dibujando el triángulo... el lado izquierdo

_root.contenidor.origen.lineTo(a2, 0); /* ...el lado derecho

_root.contenidor.origen.lineTo(-a1, 0); /*... el lado horizontal

_root.contenidor.origen.endFill;

dibuixa_altura(); /* Se dibuja la altura ...

}

dibuixa_triangle(); /*... y alrededor de ella el triángulo.

PARA UN CÍRCULO

_root.contenidor.attachMovie("contenidor", "origen", 1);

function calcula_radi() {

r = random(150)+50; /*r valdrá entre 50 y 199

}

function dibuixa_cercle() {

_root.contenidor.origen.clear();

calcula_radi();

_root.contenidor.origen.beginFill(0x0033CC, 60);

_root.contenidor.origen.lineStyle(2, 0x0033CC, 100);

_root.contenidor.origen.moveTo(r, 0); /* Consideramos como inicio del dibujo la coordenada x=r (re se ha generado anteriormente de forma aleatoria...) e y=0 ...

for (i=0; i<=360; i=i+5) { /*Con for establecemos un bucle que se inicia con la variable i con valor 0, definiendo que el bucle se ejecutará mientras i es menor que 360, y a cada interacción del bucle el valor de i se incrementa en 5

angle = i*Math.PI/180; /* Definimos la variable ángulo con un valor que es el valor de i por el valor de pi dividido entre 180 (así calculamos el valor del ángulo i en radianes..).

_root.contenidor.origen.lineTo(r*Math.cos(angle), -r*Math.sin(angle)); /* A partir de x=r (...moveTo) Se va dibujando una línea que va hasta las coordenadas que ahí se indican ( Math.cos o sin halla el valor del coseno o seno del ángulo angle que está en radianes. Al multiplicar eso por el radio, obtenemos las coordenadas del vértice indicado, ya que, por ejmplo, r por el seno es el lado que está enfrente del ángulo, en trocitos, y su valor es la coordenada x. Análogo para el coseno...) Se supone que el bucle ( for) incrementa i en 5 grados con lo que se dibujaría laditos hasta completar i =>360º. }

_root.contenidor.origen.endFill;

}Este vértice tiene las coordenadas especificadas. De la 1ª rayita

46

Page 47: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

dibuixa_cercle();

Para una ELIPSE sería como antes pero añadiendo lo rojo...

_root.contenidor.attachMovie("contenidor", "origen", 1);

function calcula_radi() {

r1 = random(150)+50;

r2 = random(150)+50;

}

function dibuixa_cercle() {

_root.contenidor.origen.clear();

calcula_radi();

_root.contenidor.origen.beginFill(0x0033CC, 60);

_root.contenidor.origen.lineStyle(2, 0x0033CC, 100);

_root.contenidor.origen.moveTo(r, 0);

for (i=0; i<=360; i=i+5) {

angle = i*Math.PI/180;

_root.contenidor.origen.lineTo(r1*Math.cos(angle), -r*Math.sin(angle)); _root.contenidor.origen.endFill;

}

dibuixa_cercle();

Un POLÍGONO:

47

Page 48: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

Para un ROMBO:

-Se crea la variable n que vale en un principio 3. Está asociada a un texto de entrada con ese nombre (n)

-Iniciamos el polígono en la coordenada x=0 e y=-r (hacia arriba del punto origen)

-Definimos esa variable como el valor de dividir 360 entre n (divide los 360 en tantos ángulos como queramos que tenga el polígono; al ser iguales será regular)

-El bucle for hace que se dibujen líneas, con incrementos de i según esa variable, hasta que i tenga un valor menor o igual que 360 menos la mitad del incremento. Así nos aseguramos que con el último incremento no nos pasemos ¿¿??

-Math.max devuelve el mayor valor de d1 o d2. Es decir a valdrá siempre el valor de la diagonal mayor. Que es como saldrá así como de pié.

48

Page 49: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

MOVER CON LAS FLECHAS UN CLIP DE PELÍCULA (el del recuadrito azul)

on (keyPress "<Left>") {this._x--;

}on (keyPress "<Right>") {

this._x++;}on (keyPress "<Down>") {

this._y++;}on (keyPress "<Up>") {

this._y--;}//Con estos script hacemos que al pulsar la tecla flecha izquierda, derecha y flecha arriba, abajo,... el clip se mueva hacia la izquierda o hacia arriba, etc... un pixel .

-Tenemos un fondo ...

-El clip_mou, que es el que movemos...

-Los clip_lletres, que son clip que sólo tiene una vocal...

-Los clip_tanca, que son clips con una línea o un rectángulo,

, y con diferentes nombres de instancia

t de tancar (cerrar), que detectarán si el clip_mou los “toca”)(hay 7 que son las líneas azules que se ven a la derecha)

-El clip_final que es una instancia sin nombre del clip_arribada y que detectará cuando llegue el clip_mou.

Programamos: (cuidado al copiarlo a flash que añade espacios… o cosas raras y da errores…)

on (keyPress "<Left>") {this._x--;

if( this.hitTest( _root. t01_mc) | | this.hitTest (_ root.t03_mc) | |this.hitTest( _root. t06_mc)) { this._x+ +;  /*Le decimos que sobre los clip_tanca (que son los verticales a los que tocará por el clip_mou por el lado derecho) con esos nombres de instancia de la película principal (con | | incluimos los tres como si fuera “o uno u otro u otro”)” si tocan (hitTest) al clip_mou (que es sobre el que escribimos (this.) Entonces el clip_mou (this) se moverá hacia la derecha (_x++) 1 pixel . Con lo que no podrá seguir a la izquierda. }}on (keyPress "<Right>") {

this._x++; if( this.hitTest( _root. t05_mc) | | this.hitTest (_ root.t06_mc) | |this.hitTest( _root. t07_mc)) (  this._x- -;  /*Análogo anterior para los… (que son los verticales a los que tocará por el clip_mou por el lado izquierdo) y le obligará a ir a la izquierda (_x-;) y se quedará parado.)}on (keyPress "<Down>") {

this._y++; if (this.hitTest( _root.t02_mc) || this.hitTest (_root.t04_mc)) { this._y- -; /*Análogo anterior para los… (que son los horizontales a los que tocará por el clip_mou por arriba) y le obligará a ir hacia arriba y se parará }}on (keyPress "<Up>") {

49

Page 50: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

this._y--; if (this.hitTest( _root.t06_mc) || this.hitTest (_root.t07_mc)) { this._y++; -; /*Análogo anterior para los… (que son los horizontales a los que tocará por el clip_mou por abajo) y le obligará a ir hacia abajo y se parará...

}

}

Creamos un campo de texto dinámico (que colocaremos en la meta) como variable al que llamaremos y escribimos en la capa acciones:

mou_mc.onEnterFrame = function() {

if (this.hitTest(_root.arribada_mc)) {

_root.arribada = "FANTÁSTICO";

}

};

Ahora vamos a hacer que detecte el choque con las letras que están en el camino. Seguimos en el primer fotograma:

MÉTODO APPLY (aplica rápidamente una misma función a distintos clip de película)a_mc , e_mc… son el nombre de las instancias del los clipa, clipe...

chocar = function () { /*Definimos la function chocar…

this.onEnterFrame = function() { /* A la velocidad de la película creamos otra función que hará que

if (this.hitTest(_root.mou_mc)) { /*A quien se aplique esta función (this.) si toca al clip_mou de la película principal...

this._x = _root.mou_mc._x; /*ël tendrá sus coordenadas actuales ,en todo momento (enterframe), iden´ticas a las coordenadas del

clip_mou (Como si se las tragara)

this._y = _root.mou_mc._y;

}

};

};

chocar.apply(a_mc); /*A través del método apply aplicamos la función chocar a cada uno de los clip de las letras . ES decir apply hace que si mou_mc toca a una letra, a ella se le aplica la función.

chocar.apply(e_mc);

chocar.apply(i_mc);

chocar.apply(o_mc);

chocar.apply(u_mc);

/*Con apply nos ahorramos mucha programación. Si no lo utilizáramos para cada letra tendríamos que poner:

a_mc.OnEnterFrame= Function () {

50

Page 51: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

if (this.hitTest(_root.mou_mc)) {

this._x = _root.mou_mc._x;

this._y = _root.mou_mc._y;

}

}

DROPTARGET y APPLY otra vez

Es una actividad similar a la del puzzle que se arrastran las piezas y si las ponemos a una distancia minima (margen de error) se colocan en el sitio. Aquí el margen lo determina el tamaño de la instancia que hace de base.

Consta de los gráficos de las frutas con un gráfico del lugar dónde se colocará la palabra correspondiente.y los textos. Asociados a los textos y a los rectángulos que

hay debajo de la fruta están instancias de un mismo clip que es el símbolo2. Cada instancia de este clip se ha denominado así:

hasta completar todas las frutas. Y hasta completar todas las palabras... correspondiéndose los números de las palabras con el de las frutas, para no liarse... El tamaño de los “fondos” determinarán la dificultad de los ajustes...

En la capa acciones seleccionaremos:

encajar = function () { /* Definimos esa function que hace que …

this.onPress = function() { /*Al presionar sobre (el clip que apply relaciona con la función)

x = this._x; /*Grabamos las coordenadas x e y al pulsar con el ratón . (La variable x es la posición actual _x al pulsar...)

y = this._y;

this.startDrag(); /*Y se deje arrastrar…

this.swapDepths(0); /*Con este método (swapDepths) la pieza arrstrada pasa al nivel superior de profundidad de la película ( a primer plano)

};

};

encaix.apply(encaix01_mc); /*Con apply hacemos que para cada instancia de esas, al presionar sobre ellas se les aplique la función anterior, es decir, se dejen arrastrar y pasen a “primer plano”...

51

Page 52: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

encaix.apply(encaix02_mc);

encaix.apply(encaix03_mc);

encaix.apply(encaix04_mc);

encaix.apply(encaix05_mc);

encaix.apply(encaix06_mc);

encaix01_mc.onRelease = function() { /*Al soltar la instancia encaix01_mc, se ejecutará una función que hará

this.stopDrag(); /*Que ya no se deje arrastrar

if (eval(this._droptarget) == (_root.fons01_mc)) { /*Si la ruta donde se suelta esa instancia coincide con la de la instancia fons01_mc (eval(this.droptarget devuelve la ruta del clip que soltamos en este caso) …

this._x = _root.fons01_mc._x; /*Entonces la posición actual del clip en el que estamos (this._x) (que es enacix01) será la misma que la del fons01 (se superpondrán)

this._y = _root.fons01_mc._y;

} else { /*Si no ...

this._x = x; /*Volverá a la posición memorizada al principio

this._y = y;

}

};

Se hace esto para cada encaix...

EJERCICIO DE ARRASTRAR Y SOLTAR CON DROPTARGET Y APPLY

He realizado una adaptación del ejercicio hecho con hitTest, pero utilizando ahora droptarget y apply. La única diferencia es que lo que se ha colocado se puede seguir arrastrando pero vuelve automáticamente al sitio de la solución donde estaba.

He tratado de poner nombres genéricos para adaptarlos a cualquier ejercicio cambiando sólo algunos números.

*En apariencia todo es igual.

52

Page 53: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

*Hay tres gráficos (círculo, cuadrado, triángulo) que son simplemente gráficos.

*El clip base es simplemente un cuadrado (se ha empleado el gráfico llamado cuadrado).

*Los clip nombre... son análogos a la versión de Octavi al igual que el clip volver.

*Aquí las capas acciones, contador y botón repetir siguen igual (acciones con otra programación).

*La capa objetivos de Octavi, la he desmenuzado en clip encajar (los que se arrstyran para encajarlos) , clips fondo (la “meta” del arrastre anterior) y figuras (donde solo están los tres gráficos a pelo)

Capa figuras (lo demás está oculto)

Los tres gráficos a pelo (sin nombre ni nada)

Capa clip fondos (lo demás está oculto)

Son tres instancias del clip base, con color: Alfa 0% (ventana propiedades), situadas encima de las figuras. Se han llamado:

etc...

Capa clip encajar (lo demás está oculto)

Son instancias de sus respectivos clip de la biblioteca y nombradas así:

Los nombres de las anteriores instancias ya se han puesto de forma que encajar01_mc vaya hacia fondo01_mc... etc, así el nombre triángulo va con la figura triángulo...etc

Comparar ambas programaciones, en el fotograma de la capa de acciones:

Versión hitTest Lo que está en rojo es idéntico y lo que están en naranja se ha quitado

Versión droptarget

x1 = nombreCirculo._x;

y1 = nombreCirculo._y;

x2 = nombreCuadrado._x;

y2 = nombreCuadrado._y;

x3 = nombreTriangulo._x;

y3 = nombreTriangulo._y;

var aciertoCirculo = "false";

x1 = encajar01_mc._x;

y1 = encajar01_mc._y;

x2 = encajar02_mc._x;

y2 = encajar02_mc._y;

x3 = encajar03_mc._x;

y3 = encajar03_mc._y;

53

Page 54: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

var aciertoCuadrado = "false";

var aciertoTriangulo = "false";

var aciertos = 0;

var intentos = 0;

function mostrarResultado() {

textoContador = "<b>Has acertado<font size='26'> "+aciertos+"</font> de<font size='26'> "+intentos+" </font>intentos</b>";

}

mostrarResultado();

nombreCirculo.onPress = function() {

if (aciertoCirculo == "false") {

this.startDrag();

}

};

nombreTriangulo.onPress = function() {

if (aciertoTriangulo == "false") {

this.startDrag();

}

};

nombreCuadrado.onPress = function() {

if (aciertoCuadrado == "false") {

this.startDrag();

}

};

{ nombreCirculo.onRelease = function()

//Si es que si...

if (nombreCirculo.detectorCirculo.hitTest(_root.figuraCirculo)) {

this.stopDrag();

this._x = 205;

this._y = 100;

aciertoCirculo = "true";

aciertos++;

intentos++;

var aciertos = 0;

var intentos = 0;

function mostrarResultado() {

textoContador = "<b>Has acertado<font size='26'> "+aciertos+"</font> de<font size='26'> "+intentos+" </font>intentos</b>";

}

mostrarResultado();

/*Con la siguiente función vamos a hacer que al presionar sobre los nombres, se dejen arrastrar y ...*/

encajar = function () {

this.onPress = function() {

this.startDrag(); /*Se dejan arrstrar…*/

this.swapDepths(0); /*Este método hace que el clip en el que estamos y que arrstramos, pase al nivel superior (encima de los demás)...*/

};

};

/*¡¡¡MUY INTERESANTE!!! . Gracias al método apply, aplicamos los “efectos” de una función ( en este caso la función encajar) a todas las instancias que queramos. ASÍ SI SOBRE VARIAS INSTANCIAS TENEMOS QUE EJECUTAR UNA MISMA ACCIÓN, con apply nos ahorramos escribir... Assí sobre las tres instancias siguientes aplicamos automáticamente la función encajar al presionarlas.*/

encajar.apply(encajar01_mc);

encajar.apply(encajar02_mc);

encajar.apply(encajar03_mc);

encajar01_mc.onRelease = function() {

this.stopDrag();

/*Hemos definido esta funcion de forma que la funcion (eval) “mira” si al soltar el clip encajar01, su posición ( que la detecta droptarget)es igual a la del clip fondo01 de la película,. Si eso es así...*/

if (eval(this._droptarget) == (_root.fondo01_mc)) {

/*La posición del clip soltado será la misma que la del clip fondo. Se superpone encima ( ya que antes swapDepths, lo llevó al plimer plano.*/

this._x = _root.fondo01_mc._x;

this._y = _root.fondo01_mc._y;

aciertos++;

intentos++;

mostrarResultado();

} else { /*Si no ocurriera eso, la posición del clip soltado volvera a su

54

Page 55: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

mostrarResultado();

} else {

this.stopDrag();

this._x = x1;

this._y = y1;

intentos++;

mostrarResultado();

}

};

nombreCuadrado.onRelease = function() {

if (nombreCuadrado.detectorCuadrado.hitTest(_root.figuraCuadrado)) {

this.stopDrag();

this._x = 40;

this._y = 100;

aciertoCuadrado = "true";

intentos++;

aciertos++;

mostrarResultado();

} else {

this.stopDrag();

this._x = x2;

this._y = y2;

intentos++;

mostrarResultado();

}

};

nombreTriangulo.onRelease = function() {

if (nombreTriangulo.detectorTriangulo.hitTest(_root.figuraTriangulo)) {

this.stopDrag();

this._x = 362;

this._y = 100;

aciertoTriangulo = "true";

intentos++;

posicón inicial, grabada en x e y al pulsarlos (está en la función encajar...)

this._x = x1;

this._y = y1;

intentos++;

mostrarResultado();

}

};

encajar02_mc.onRelease = function() { /*Idema anterior…*/

this.stopDrag();

if (eval(this._droptarget) == (_root.fondo02_mc)) {

this._x = _root.fondo02_mc._x;

this._y = _root.fondo02_mc._y;

aciertos++;

intentos++;

mostrarResultado();

} else {

this._x = x2;

this._y = y2;

intentos++;

mostrarResultado();

}

};

encajar03_mc.onRelease = function() { /*Idema anterior…*/

this.stopDrag();

if (eval(this._droptarget) == (_root.fondo03_mc)) {

this._x = _root.fondo03_mc._x;

this._y = _root.fondo03_mc._y;

aciertos++;

intentos++;

mostrarResultado();

} else {

this._x = x;

this._y = y;

intentos++;

mostrarResultado();

55

Page 56: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

aciertos++;

mostrarResultado();

} else {

this.stopDrag();

this._x = x3;

this._y = y3;

intentos++;

mostrarResultado();

}

};

repetir.onRelease = function() {

intentos = 0;

aciertos = 0;

aciertoCirculo = "false";

aciertoCuadrado = "false";

aciertoTriangulo = "false";

nombreCirculo._x = x1;

nombreCirculo._y = y1;

nombreCuadrado._x = x2;

nombreCuadrado._y = y2;

nombreTriangulo._x = x3;

nombreTriangulo._y = y3;

mostrarResultado();

};

}

};

repetir.onRelease = function() {

intentos = 0;

aciertos = 0;

encajar01_mc._x = x1;

encajar01_mc._y = y1;

encajar02_mc._x = x2;

encajar02_mc._y = y2;

encajar03_mc._x = x3;

encajar03_mc._y = y3;

mostrarResultado();

};

Lo mismo pero SIMPLIFICANDO CÓDIGO CON ARRAYS

En el ejemplo del circulo, triángulo y cuadrado usamos estas instrucciones

x1 = nombreCirculo._x;

y1 = nombreCirculo._y;

x2 = nombreCuadrado._x;

y2 = nombreCuadrado._y;

56

Page 57: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

x3 = nombreTriangulo._x;

y3 = nombreTriangulo._y;

Para fijar las coordenadas iniciales de los tres rótulos de las figuras geométricas. ¿Qué pasaría si hubiera 50 objetos? ¿Cómo podríamos simplificar el

código?

Las seis instrucciones anteriores son equivalentes a estas

nombreFig = new Array();

nombreFig = ["0", "nombreCirculo", "nombreCuadrado", "nombreTriangulo"];

posX = new Array();

posY = new Array();

for (i=0; i<4; i++) {

posX[i] = _root[nombreFig[i]]._x;

posY[i] = _root[nombreFig[i]]._y;

}

Este código sería casi igual de largo para tres que para cincuenta símbolos. Paso a explicarlo.

Las dos primeras líneas definen un Array (una matriz), que llamamos nombreFig Para entendernos, se trata de una lista que contiene

ordenados los nombres de los rótulos, en nuestro caso tres, además del 0, objeto inicial obligatorio en este tipo de objetos.

‘posX’ es igualmente la declaración de un Array,

‘posY’ lo mismo. Observa que, así como en el Array ‘nombreFig’ si hemos enumerado los elementos de que consta, no lo hemos hecho con

estos otros dos. ¿Porqué? Porque vamos a hacerlo ahora mismo:

Atención ahora a las 4 últimas lineas. Estan diciendo que, para cualquier valor entre 0 y 3, (o sea 0, 1, 2 y 3)

posX será el valor de la coordenada x del objeto de la lista correspondiente de nombreFig.

Por ejemplo, analicemos

posX[1] = _root[nombreFig[1]]._x

_root[nombreFig[1]] es el elemento numero 1 de la lista nombreFig, osea, nombreCirculo.

Y por tanto, _root[nombreFig[1]]._x es su coordenada x

Y por tanto posX[1] es lo que antes llamábamos x1

Solo nos queda cambiar en el resto del código

x1 por posX[1]

x2 por posX[2],

y1 por posY[1]

y así sucesivamente.

57

Page 58: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

PRUEBA CON PREGUNTAS Y ...

Estructura fotograma 1

Estructura fotograma 2 Estructura fotograma 3

Clip Progres

Ews un clip de 100 fotogramas con una interpolación de movimiento...Un stop en el primero.

*Capa sonido con esta programación en el primer fotograma...

58

Page 59: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

my_sound = new Sound(); /*Creamos un Nuevo objeto de sonido que nos permitirá controlar el sonido de la película..*/

control_volum = function () { /*Definimos esta función para controlar el volumen a través de la instancia volumenSlider. No entiendo la programación...¿¿¿¿????

volumeSlider.currentTarget = my_sound;

volumeSlider.currentProp = "setVolume";

volumeSlider.setProp(volumeSlider.pos._x, "setVolume", my_sound);

};

control_volum(); /*llamamos a esta función...

nom = "mediterrania.mp3"; /*Definimos con ese valor en letras a esa variable…*/

my_sound.loadSound(nom, 1); /*Con loadSound cargamos el sonido de la variable nom al objeto de sonido my_sund

//my_sound.start(0, 1);

my_sound.stop(); /*El sonido se carga pero lo paramos.

continuar.onRelease = function() { /*Al presionar el botón continuar...*/

//trace("la posición en segundos es "+(my_sound.position/1000)+"segundos");

//my_sound.stop();

temps = (my_sound.position/1000); /*/Esa variable que definimos tendrá el valor en segundos del valor que devuelve la propiedad position (devuelve en milisegundos el tiempo que un sonido se ha estado reproduciendo: Al dividir entre mil lo convertimos a segundos). Temps nos dirá el tiempo, en segundos, que se ha reproducido el sonido del objeto my_sound.

my_sound.start(temps, 1); /*Start nos reproduce el sonido desde el tiempo que indica la variable temps (es decir continúa el sonido desde donde estaba... y una vez */

};

botoparar.onRelease = function() { /*Definimos esta función para detener el sonido...*/

my_sound.stop();

};

botoinicia.onRelease = function() { /*Definimos esta función para

my_sound.start(0, 1); /* Que el sonido se reproduzca desde el principio. Desde el segundo 0 ... una vez...*/

my_sound.stop(); /* Para el sonido . Así se queda espèrando a reproducirse desde el principio... definido antes.

//la barra de progrès es posa al començament

_root.progress_mc.gotoAndStop(1); /*El clip ese de la película principal va y se para en el fotograma 1.

};

progress_mc.onEnterFrame = function() { /*Definimos esta función que se ejecutará a la velocidad de los fotogramas (enterframe) para el clip progres

var progressAmount = Math.round(((my_sound.position/my_sound.duration)*100)); /*creamos esa variable que sacará un valor entero (redondeado con round) del porcentaje hallado con esa operación (Es una regla de tres. Si 100% es toda la duración , la posición en que esté el sonido valdrá x)

this.gotoAndStop(progressAmount); /*El clip This ( en el que estamos que es progress_mc) irá i se parará al fotograma cuyo número es ese número anterior redondeado..*/

segons.text = Math.round(my_sound.position/1000)+" segons"; /* En la variable segons saldrá el valor de la propiedad text que hace que salga redondeado el valor position (en milisegundos) del objeto de sonido my_sound, pasado a segundos (/1000) más el texto “segundos...”

duracion.text = Math.round(my_sound.duration/1000)+" segons totals"; /*Análogo anterior pero para la duración total.

59

Page 60: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

if (progressAmount == 100) { /* Cuando esa variable definida antes, valga 100 (se ha escuchado todo el sonido)

_root.gotoAndStop(2); /*La película irá al fotograma dos, donde están las preguntas.

}

};

*Capa sonido con esta programación en el segundo fotograma (que es el mismo que lo del primero excepto la última acción if ... Para tener la posibilidad de ir oyéndolo conforme se responde)...

my_sound = new Sound();

control_volum = function () {

volumeSlider.currentTarget = my_sound;

volumeSlider.currentProp = "setVolume";

volumeSlider.setProp(volumeSlider.pos._x, "setVolume", my_sound);

};

control_volum();

nom = "mediterrania.mp3";

my_sound.loadSound(nom, 1);

my_sound.stop();

continuar.onRelease = function() {

temps = (my_sound.position/1000);

my_sound.start(temps, 1);

};

botoparar.onRelease = function() {

my_sound.stop();

};

botoinicia.onRelease = function() {

my_sound.start(0, 1);

my_sound.stop();

_root.progress_mc.gotoAndStop(1);

};

progress_mc.onEnterFrame = function() {

var progressAmount = Math.round(((my_sound.position/my_sound.duration)*100));

this.gotoAndStop(progressAmount);

segons.text = Math.round(my_sound.position/1000)+" segons";

duracion.text = Math.round(my_sound.duration/1000)+" segons totals";

};

60

Page 61: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

CAPA ACTIONS MULTICHOICE (ELECCIÓN MÚLTIPLE):

FOTOGRAMA 1:

proposta = "La Mediterrània: prova de competències bàsiques"; /*Definimos esa variable en la que saldrá ese texto...*/

nom_txt.border = true; /*A través de la propiedad border, asignamos (trae) un borde a esa variable de texto.

nom_txt.borderColor = "0x9999FF"; /*Con ese color estará el borde

stop();

FOTOGRAMA 2:

System.useCodepage = true;

ce = 1; /* Definimos esta variable para saber en que ejercicio estamos . En este caso empezamos por el 1.

enun1 = "L'astronauta Amstrong va dir que el que més li havia cridat l'atenció en el seu viatge fou:"; /*Definimos las variables enunciados...

resp11 = "La immensitat de l'espai."; /*... la elección primera de la 1

resp12 = "La bellesa de l'aigua de la terra."; /* ...LA elección 2ª de la 1

resp13 = "L'escassetat d'aigua a l'univers."; /* ...

respc1 = resp12; /* Definimos la respuesta correcta*/

enun2 = "Els habitants de la costa quan no veuen el mar:";

resp21 = "En parlen sovint.";

resp22 = "El somien cada dia.";

resp23 = "En senten enyorança.";

respc2 = resp23;

Y así hasta las 11 preguntas...

cemax = 11; /*Definimos esa variable ( máximo de ejercicios o ejercicio último) con valor 11

function posa_enunciat() { /*Definimos la función pon enunciado...

ex = "<font color='#0066cc' >Exercici <B>"+ce+"</B>/<B>"+cemax+"</B></font>"; /* Sale un texto análogo a esto : Se han definido el color , en negrita el 1 (que es el valor de ce) , La barra inclinada sin negrita, la variable cemax (en negrita) que es 11--

enunciat = this["enun"+ce]; Definimos esta variable como el texto enun más el valor de la variable ce. Así enunciat valdra por ejemplo enun 1 (con lo que aparecera, en la variable enun el valor de enuu1 que es la primera pregunta en este caso.

}

posa_enunciat(); Definimos la variable pon enucnciado...

function posa_respostes() {

resp1 = this["resp"+ce+1]; En cada variuable de texto (resp1, resp2…) saldrá el texto “resp” más el valor de ce (pregunta en la que estamos ) y 1 de la primera opción. Por ejemplo resp1= resp11 (y así saldrá el texto de la variable resp11...etc par 2 y 3...

resp2 = this["resp"+ce+2];

61

Page 62: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

resp3 = this["resp"+ce+3];

}

posa_respostes();

function be() { Definimos al respuesta buena

La variable sortida valdrá lo que ya valía, más el valor de la variable ex

sortida = sortida+ex+"<br>.-&nbsp;"+eval("enun"+ce)+"<BR>"+"<Font color='#33ff33'>"+resp+"&nbsp;</FONT><BR>";

seguent();

} -<br> Salto de línea.

.-&nbsp (espacio en blanco despues del .-)

Eval (“enun”+ce) : devuelve el valor de, en este caso enun2

Se define el color de la respuesta elegida por el usuario

function mal() { /*Definimos las respuesta malas

sortida=sortida+ex+"<BR>.-&nbsp;"+eval("enun"+ce)+"<BR>"+"<Font color='#ff0000'>"+resp+"&nbsp;</FONT>&nbsp;<I>("+eval("respc"+q)+")</I><BR>";

k++; /*Esta variable se incrementa en uno con cada fallo (no sé dónde

se ha definido)

seguent();

} /*Análogo a lo anterior pero aparece la respuesta en rojo y ademas la correcta... (la q ¿¿¿???)

function seguent() { Definimos la variable siguienta que incrementa una unidad al valor de la variable ce (pasamos a la preguntasiguiente...)

ce++;

posa_enunciat(); Se ejecutan las siguinetes funciones para poner enunciados y respuestas a elegir…

posa_respostes();

if (ce>cemax) { Si la pregunta en la que estemos es mayor que la última...

gotoAndStop(3); Pasamos al fotograma 3 que nos dará el informe...

}

}

function corregeix() { definimos la function corregir…

respc = eval("respc"+ce); La variable respc (respuesta correcta definidas arriba) será loq ue (eval) devuelva con respc y la variable ce. Es decir Si estamos en la pregunta uno La respuesta corrceta será la respc=respc1

if (resp == respc) { /*Si la respuesta elegida por el usuario (resp) es la correcta

be(); Se llama a esta función

} else { /*Si no

mal(); /*A esta otra…

}

}

62

Page 63: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

boto_a.onRelease = function() { /*Al presionar y soltar sobre el botón de la respuesta a...

resp = resp1; La variable resp valdrá resp1 (y será evaluada por la función corregeix ...que utiliza esta variable

corregeix();

};

boto_b.onRelease = function() {

resp = resp2; ….

corregeix();

};

boto_c.onRelease = function() { ….

resp = resp3;

corregeix();

};

stop();

FOTOGRAMA 3:

resum = "Has tingut <B>"+k+" </B>errades en els <B>"+cemax+" </B>exercicis"; /*Definimos la variablñe resum como esos textos entrecomillados con formato ... + el número de errores más el texto ese con el número total de preguntas.

sessio=nom_usuari+":aquítens la teva avaluació de la prova<br><br><font color='#003399' ><B>"+proposta+"</B></FONT><BR><BR>"+sortida+"<BR><BR>"+resum;

/*La variable sessio (que es un texto dinámico multilínea del tercer fotograma capa cuadres) mostrará El nombre que haya escrito es usuario al principio MÁS ESE TEXTO ... más el contenido de la variable proposta (que es el título de la actividad) y el contenido de la variable resum

stop();

Como el texto puede ser largo se le añaden dos botones Scholl con esta programación en ellos

on (press) {

sessio.scroll--; /*Con la propiedad Scholl podemos desplazar un campo de texto verticalmente. Aquí retrocedemos (--)

}

on (press) {

sessio.scroll++; /*...

63

Page 64: api.ning.comapi.ning.com/.../EjemplosconcretosdeActionScript.docx · Web viewCada clip de imagen de fruta y de nombre de fruta está formado por un botón ( es decir para hacer el

}

function situa() {

_root.x = _root.lin1.base.getBounds(_root);

_root.mx = _root.x.xMin;

_root.my = _root.x.yMin;

eval(_root.escollir)._x = _root.mx+15; /* Escollir será el nombre de la pesa

que se ponga en la base (plato)*/

eval(_root.escollir)._y = _root.my;

}

/*Esta función, a través de getBounds, valora la situación de UN CLIP QUE ESTÁ DENTRO DE OTRO CLIP, y hace que el clip interior tome las referencias respecto del escenario y no respecto del punto de registro del clip que lo alberga.

Es el ejercicio de la palanca (ARCHIVOS FLASH INTERESANTES>PROGRAMACIÓN BÁSICA) donde el punto de apoyo de la palanca se “reposiciona” y sigue horizontal y apoyado al suelo (aunque está dentro de la palanca) cuando la palanca se inclina.

64