Professional Documents
Culture Documents
Pg. 1
Resumen
Este proyecto de final de carrera tiene el objetivo de desarrollar una aplicacin basada en
dispositivos mviles para el aprendizaje de las matemticas. Se trata de una aplicacin que
facilite al alumno la resolucin de ejercicios y problemas del nivel educativo en el que se
encuentra. El rango de edades hacia las que est dirigida la aplicacin son de 11 a 15 aos,
es decir, las edades
educativo.
El desarrollo de la aplicacin ha sido enfocado, en todo momento, desde un punto de vista
educativo y pensando en su finalidad inmediata, es decir, proporcionar una ayuda a los
estudiantes en su proceso de aprendizaje de las matemticas.
A lo largo de esta memoria se explica detalladamente todo el proceso de creacin de la
aplicacin, as como las herramientas y recursos utilizados para ello. Tambin se recoge
otra informacin como el anlisis econmico de este proceso, su planificacin temporal y su
impacto medioambiental.
En los anexos se encuentra toda la informacin tcnica que se ha utilizado para llegar a
nuestro objetivo. Tambin se ha incluido todo el cdigo de programacin empleado para la
implementacin de la aplicacin.
En soporte informtico se proporcionan todos los ficheros utilizados para la programacin de
la aplicacin, as como la memoria y sus anexos en soporte electrnico.
La aplicacin fruto de este proyecto es un prototipo que deber ser depurado y puesto a
prueba en posteriores fases que se escapan al objeto del presente proyecto. An siendo as,
se han indicado una serie de mejoras que se pueden llevar a cabo tras la creacin del
primer prototipo.
Pg. 2
Memoria
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 3
Sumario
RESUMEN ___________________________________________________ 1
SUMARIO ____________________________________________________ 3
1.
GLOSARIO _______________________________________________ 7
2.
PREFACIO _______________________________________________ 9
1.1
Motivacin ...................................................................................................... 9
INTRODUCCIN _________________________________________ 11
2.1
2.2
3.2
3.2.1
ActionScript ..................................................................................................... 14
3.2.2
FlashDevelop .................................................................................................. 16
3.2.3
3.2.4
3.2.5
4.1.1
4.2
Estructura. .................................................................................................... 36
Pg. 4
Memoria
5.1.1
5.1.2
5.2
5.2.1
5.2.2
5.2.3
5.2.4
5.2.5
5.2.6
5.3
5.3.1
5.3.2
5.3.3
CDIGO Y ARQUITECTURA________________________________49
6.1
6.1.1
6.2
6.2.1
6.3
La clase SharedObject................................................................................. 57
6.5.1
6.6
Cuadros de texto.......................................................................................... 55
6.4.1
6.5
Eventos ........................................................................................................ 54
6.3.1
6.4
7.1.1
7.2
Cronologa ................................................................................................... 62
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 5
8.2
8.3
CONCLUSIONES _____________________________________________ 69
AGRADECIMIENTOS __________________________________________ 71
BIBLIOGRAFA ______________________________________________ 73
9.1
ANEXOS ____________________________________________________ 75
Anexo I: Cdigo de programacin ......................................................................... 75
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 7
1. Glosario
iOS: iPhone/iPod/iPad Operative System. Sistema operativo utilizado por los dispositivos
mviles de Apple
app: Aplicacin mvil.
TIC: Tecnologas de la Informacin y la comunicacin.
OS: Sistema Operativo
AS: ActionScript
POO: Programacin orientada a objetos
API: Application Programming Interface
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 9
2. Prefacio
Se podra afirmar que la educacin es uno de los pilares ms importantes de la sociedad. Y
de la misma manera que sta, evoluciona y cambia para adaptarse a los nuevos modos de
hacer y avances tecnolgicos. En la actualidad, la educacin est experimentando un gran
cambio con la entrada en las aulas de las nuevas tecnologas. Este cambio precisa de
nuevos elementos que tradicionalmente no han sido utilizados en este mbito. Un grupo de
estos elementos son los dispositivos mviles. Hoy da no estn excesivamente integrados
en la educacin, pero, segn la comunidad educativa, irn adquiriendo cada vez ms peso
dentro de las aulas.
1.1 Motivacin
Ciertos centros educativos, con el nico objetivo de mantener y aumentar su excelencia
acadmica, estn desarrollando planes estratgicos de innovacin tecnolgica en diferentes
mbitos de los centro. La columna vertebral en la mayora de estos planes es la introduccin
de los dispositivos mviles en las aulas, as como convertirlos en la principal herramienta de
trabajo para el alumno. Esta es una de las realidades educativas del estado espaol en
estos momentos. Hay muchos debates abiertos sobre la conveniencia de estos planes de
innovacin, pero no los abordaremos porque no son el objeto de este proyecto.
La presencia de los dispositivos mviles en las aulas, as como la necesidad de disponer de
aplicaciones (apps) que le den una verdadera utilidad a estos dispositivos, es la principal
motivacin de este proyecto. Desde el punto de vista de la educacin, el mtodo utilizado
para transmitir conocimientos es adecuado en la medida que se adapta a lo que el profesor
necesita para realizar, de manera eficaz, esta transmisin. Es por esto, que la tecnologa en
s, los dispositivos mviles en este caso, no son ninguna ayuda para la docencia. Sin
embargo, la tecnologa actual combinada con apps adecuadas a las diferentes necesidades
de los docentes significan una gran herramienta para la educacin.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 11
2 Introduccin
Este proyecto pretende resaltar los rasgos ms relevantes del proceso de diseo y creacin
de una app para dispositivos mviles.
Pg. 12
Memoria
el profesor como el alumno. A lo largo de todas las fases de desarrollo de la app se tiene
presente su posterior implementacin en el mbito del colegio, pero el estudio y anlisis de
esta implementacin se escapa a los objetivos de este proyecto.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 13
Sistema operativo
Existen tres principales sistemas operativos (a partir de ahora OS) para dispositivos mviles
que dominan actualmente el mercado mundial y, por supuesto, el espaol: iOS, Android y
Windows Phone/Windows 8. Como puede verse en la Imagen 3.1, dentro del territorio del
estado Espaol, las cuotas de mercado son del 88,1% para Android, el 7,5% para iOS y el
4,2% para Windows.
Pg. 14
Memoria
proporcionada por Apple. Por tanto, esta plataforma es una de las que necesitan
respuesta a su demanda de apps para la implementacin de sus planes.
2. De los tres OS citados, el que presenta ms dificultades para el desarrollo de una
app es iOS. Apple requiere una serie de certificados y requisitos para el testeo de
apps que parece ms interesante de investigar que otros OS. Por esto se pens que
aprendiendo a implementar apps en este OS sera ms fcil pasarse al resto de
plataformas. En realidad es as y finalmente se opt por un sistema multiplataforma
que ser explicado en siguiente apartado.
3.2.1 ActionScript
El lenguaje de programacin AS es un lenguaje orientado a objetos. Este lenguaje fue
utilizado en sus inicios en el ao 2000 por Macromedia, aunque ms adelante pas a ser el
lenguaje utilizado por Adobe (2). Se trata de un lenguaje sencillo basado en la programacin
de Scripts y bastante influenciado por otro de los lenguajes ms populares en la actualidad:
Javascript.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 15
las
diferentes
libreras
disponibles
dependiendo
del
entorno
de
programacin.
Uno de los rasgos interesantes y tiles de este tipo de programacin es la herencia. La
herencia se utiliza para crear nuevas clases a partir de las ya existentes, de tal manera
que la nueva clase hereda todos los mtodos y caractersticas de la clase dentro de la
que se ha creado. Se trata de una caracterstica muy prctica porque para crear un nuevo
objeto con ciertos mtodos existentes en otra clase, que son de inters para el
programador, lo nico que ha de hacer es aadir dos palabras de cdigo en la nueva
clas. De esta manera, todos los mtodos de la clase existente, son heredados y pueden
ser utilizados por la nueva (4).
ltima versin de ActionScript : AS 3.0
La versin 3.0 del lenguaje de Adobe vio la luz en 2006. Esta versin incluye un nuevo
motor para la maquina virtual que ejecuta AS. El nuevo motor AVM2 consigui multiplicar
por 10 la velocidad de procesamiento de su predecesor AVM1 (5). Este aumento de
Pg. 16
Memoria
velocidad, unido a las nuevas caractersticas del leguaje, hacen posible desarrollar
complejas aplicaciones y procesar cantidades de datos considerables de manera ms
eficiente y fcil.
Durante aos AS ha sido considerado un lenguaje de programacin pobre. Sin embargo,
actualmente se ha convertido en un lenguaje utilizado por una importante cantidad de
programadores. En Agosto de 2014 AS ha entrado en la lista de los 20 lenguajes ms
utilizados por los programadores (6). Esto se debe a las mejoras introducidas por esta ltima
versin y al esfuerzo realizado por Adobe para conseguir acompaar el lenguaje de una
serie de plataformas que le dan mayo utilidad. Una de estas plataformas es Adobe Air, la
cual se ha utilizado para desarrollar este proyecto y se explicar al final de este captulo.
3.2.2 FlashDevelop
El entorno de programacin elegido para el desarrollo de la app es FlashDevelop. Se trata
de un entorno de programacin de cdigo libre promocionado por una comunidad de
desarrolladores (7). Durante aos, para programar con AS slo se poda hacer mediante los
programas de Adobe, es por esto que nacieron plataformas alternativas que ofrecen soporte
a este lenguaje. FlashDevelop naci en 2005 y actualmente es una alternativa importante
para cualquier programador que utilice AS 3.
La plataforma FlashDevelop permite corregir la sintaxis del cdigo en tiempo real. Tambin
es capaz de compilar y ejecutar el programa, as como la posibilidad de depurarlo. Por
ltimo, aparte de otras caractersticas, nos permite empaquetar el programa para su
posterior testeo o depuracin en el dispositivo.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 17
Pg. 18
Memoria
Por tanto, lo que hace posible Adobe AIR es que el cdigo empaquetado para una
aplicacin web pueda ejecutarse como una aplicacin nativa para varios OS: Windows,
MacOS, Linux, iOS, android, etc. De esta manera escribiendo un nico cdigo puedes hacer
que la app corra en todas las plataformas ms utilizadas actualmente.
El objetivo del proyecto no es hacer correr en el escritorio app de internet, ni realizar app
multiplataforma, pero la plataforma Adobe AIR permite realizar el desarrollo de la app en un
dispositivo con Windows y posteriormente hacerla correr en dispositivos con iOS. Por lo
tanto permite que se alcance uno de los objetivos del proyecto.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 19
que se muestra por pantalla a travs de una API, sta mover la imagen segn el mtodo
que contenga, pero a lo mejor el programador prefiere realizar la accin con ms fotogramas
por segundo. En estos casos, se debera descender al nivel de la API para recuperar esa
flexibilidad.
Las APIs suelen estar agrupadas en bibliotecas que los programadores tienen disponibles.
Cada OS tiene sus APIs especficas dependiendo de cmo se programe y el lenguaje
utilizado para ese OS concreto.
Las APIs son un elemento clave para entender cmo funciona Adobe AIR porque sin ellas
no sera posible el propsito de AIR. A diferencia de otras bibliotecas de APIs, Adobe AIR
incorpora unas cuantas muy tiles para ejecutar ciertas acciones de modo nativo en los
dispositivos mviles. Un ejemplo de estas sera la API del teclado nativo del OS.
El motor de ejecucin de Adobe AIR se encarga de gestionar estas APIs para conseguir
ejecutar los programas en varias plataformas.
Pg. 20
Memoria
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 21
Pg. 22
Memoria
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 23
Pg. 24
Memoria
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 25
Pg. 26
Memoria
Imagen 4.2 a) Pantalla donde se crea o selecciona el archivo de datos y b) Pantalla donde se
seleccionan los ejercicios para el nuevo fichero
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 27
Pg. 28
Memoria
Imagen 4.3: a) Pantalla de seleccin de curso, b) pantalla de seleccin de clase y c) pantalla para la
gestin de los alumnos
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 29
En el Esquema 4.4 se muestra el flujo de datos que genera la gestin de este fichero.
Pg. 30
Memoria
Esquema 4.5: Flujo de datos generado para visualizar los resultados por pantalla
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 31
Pg. 32
Memoria
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 33
En la Esquema 4.6 se explica detalladamente el flujo de datos que genera la app para llevar
a cabo esta funcin de la app.
Pg. 34
Memoria
Esquema 4.6: Flujo de datos generado para que los alumnos resuelvan los ejercicios
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 35
Pg. 36
Memoria
Esquema 4.7: Flujo de datos generado para construir la competicin entre alumnos
4.2 Estructura.
La estructura se ha desarrollado basndose en las diferentes funciones que tendr que
desarrollar la app. Se ha estructurado todo a travs de un men principal desde el cual se
accede a las funciones explicadas anteriormente. A partir de este men toda la estructura
est basada en diferentes niveles de pantallas. Desde el men principal se va accediendo a
pantallas ms profundas en la estructura.
Desde un punto de vista prctico y de accesibilidad sera ms recomendable una estructura
con un men permanentemente visible desde el que seleccionar la funcin a la que se
desea acceder, pero al no tener una estructura muy profunda de pantallas, ni muchas ms
funciones, no se ha visto conveniente utilizar este tipo de estructura.
Las pantallas de la estructura, excepto el men principal, incorpora un botn para retroceder
a la pantalla anterior. Adems, cada pantalla cuenta con todos los botones necesarios para
realizar las funciones que se requieren en esa pantalla.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 37
Pg. 38
Memoria
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 39
<texto>esto es un ejemplo</texto>
La etiqueta "texto" tendra el contenido "Esto es un ejemplo" dentro de ella porque entre la
marca que abre la etiqueta y la que cierra se encuentra dicho contenido. Siguiendo esta
estructura se pueden introducir unas etiquetas dentro de otras, de tal manera que se puede
crear una estructura por niveles:
Pg. 40
1
2
3
4
5
6
Memoria
<todoslosejemplos>
<datosejemplo>
<texto>Esto es un ejemplo</texto>
<esbueno>Si</esbueno>
</datosejemplo>
</todoslosejemplos>
<todoslosejemplos>
<datosejemplo id="1">
<texto>Esto es un ejemplo</texto>
<esbueno>Si</esbueno>
</datosejemplo>
</todoslosejemplos>
En el ejemplo anterior se define el atributo "id", que se podra utilizar para identificar cada
uno de los ejemplos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<todoslosejemplos>
<datosejemplo id="1">
<texto>Esto es un ejemplo</texto>
<esbueno>Si</esbueno>
</datosejemplo>
<datosejemplo id="2">
<texto>Este es otro ejemplo</texto>
<esbueno>No</esbueno>
</datosejemplo>
<datosejemplo id="3">
<texto>Y otro ejemplo</texto>
<esbueno>No</esbueno>
</datosejemplo>
<datosejemplo id="1">
<texto>Ms ejemplos</texto>
<esbueno>Si</esbueno>
</datosejemplo>
</todoslosejemplos>
Por tanto, y resumiendo, se trata de un lenguaje que almacena la informacin por partes,
delimitadas por marcas, de tal manera que se puede manejar la informacin al nivel que se
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 41
Pg. 42
Memoria
dispositivo o enviarlo al servidor. De esta forma, las herramientas que nos proporciona la
clase XML simplemente son para poder estructurar e interpretar el cdigo XML, pero no crea
ningn archivo de salida con formato XML, sino que utiliza una variable en tiempo de
ejecucin que es eliminada al cerrar la app. Por tanto, una vez finalizada la gestin del
cdigo se ha de guardar en un archivo externo para poder ser utilizado con posterioridad. El
mtodo utilizado para guardar el archivo ser explicado en el captulo 6.5.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 43
Reg.data = registro;
Pg. 44
Memoria
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 45
Pg. 46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Memoria
<datosalumnos>
<curso>1</curso>
<clase>A</clase>
<alumno>
<nombre>Miguel el Bueno</nombre>
<contrasea/>
<puntos>
<aciertos>1</aciertos>
<errores>0</errores>
<intentos>1</intentos>
</puntos>
</alumno>
<alumno>
<nombre>a</nombre>
<contrasea>a</contrasea>
<puntos>
<aciertos>3</aciertos>
<errores>2</errores>
<intentos>5</intentos>
</puntos>
</alumno>
<alumno>
<nombre>Paco Martinez</nombre>
<contrasea>123456</contrasea>
<puntos>
<aciertos>2</aciertos>
<errores>3</errores>
<intentos>4</intentos>
</puntos>
</alumno>
</datosalumnos>
Todos los datos se introducen en un tipo de dato llamado cadena (String). Se trata de una
cadena de caracteres seguidos que posteriormente cualquier programa puede interpretar,
segn se requiera, como numero o como texto.
El fichero se ha organizado segn las clases del centro educativo en el que se implemente.
De tal manera que cada clase de cada curso tiene un archivo propio para guardar sus datos.
La razn para separarlas es que la app del alumno slo utiliza la informacin de una clase y
sera innecesario hacerle utilizar un archivo ms extenso de los datos que estrictamente
necesite.
Con el fin de que el fichero no se sature de datos innecesarios al introducir una nueva
entrada, se comprueba que no exista. Y cada vez que se le manda la orden de eliminar un
registro, se borra toda la informacin de ese registro. Se ha programado cada actualizacin
del fichero para que todo quede estructurado y sin datos que la distorsionen.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 47
<datos>
<problema id="1">
<dificultad>1</dificultad>
<tema>Numeros enteros</tema>
<enunciado>Calcula: 2+2</enunciado>
<solucion>4</solucion>
</problema>
<problema id="2">
<dificultad>1</dificultad>
<tema>Raices y potencias</tema>
<enunciado>Calcula la raiz cuadrada de
cuatro</enunciado>
<solucion>2</solucion>
</problema>
<problema id="3">
<dificultad>1</dificultad>
<tema>Proporcionalidad</tema>
<enunciado>El 20% de 150 es:</enunciado>
<solucion>30</solucion>
</problema>
</datos>
En este caso se almacenan todos los ejercicios existentes en un nico archivo. El tamao de
este archivo no es un dato determinante para la app, ya que se gestiona solamente desde la
app del profesor. A partir de este archivo el profesor selecciona los ejercicios que quiere
utilizar para algo en concreto y genera otro de menor tamao, que ser la utilizada por el
alumno en su app.
Pg. 48
Memoria
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 49
6 Cdigo y arquitectura
En este apartado se explicar de manera detallada los rasgos importantes del cdigo
utilizado para la creacin de la app.
En el captulo 3.2.1 del presente documento se ha explicado el funcionamiento de las clases
dentro del lenguaje de programacin utilizado. Esta es una de las caractersticas principales
de este lenguaje. Para la estructura de la app se ha tratado cada pantalla (o capa) como una
clase diferente que incluye toda la funcionalidad necesaria para esa pantalla. De esta
manera tenemos una clase independiente para cada capa.
import flash.text.TextFormatAlign;
import flash.net.SharedObject;
public class Ejercicios extends Sprite
{
Pg. 50
Memoria
Una vez que la nueva clase funciona como una clase heredada de Sprite se pueden utilizar
las listas de visualizacin. Una lista de visualizacin, como su propio nombre indica, es una
lista donde aparecen los elementos que se quieren mostrar por pantalla, de tal manera que
el orden de la lista indica que elemento se visualiza antes o despus. Esta lista es todo lo
que hay que gestionar para mostrar los diferentes elementos por pantalla. Se pueden aadir
o eliminar elementos, as como cambiar el orden entre elementos (11).
En una clase heredada de tipo Sprite existe siempre un escenario (stage) de fondo sobre el
que se pueden ir aadiendo objetos de visualizacin. Este escenario de fondo no es ms
que un Sprite, pero que viene definido por defecto. Tambin se pueden crear otros Sprite,
pero siempre se han de aadir al escenario.
32
addChild(pantalla);
Con esta funcin se introduce el objeto "pantalla" dentro de la lista de visualizacin del
escenario.
168
removeChild(botonera);
161
texto.addChild(dificultad);
460
461
462
463
464
465
466
467
468
texto.removeChild(dificultad);
texto.removeChild(solucion);
texto.removeChild(enunciado);
texto.removeChild(tema);
texto.removeChild(Tid);
enunciado = new TextField();
enunciado.type = TextFieldType.INPUT;
enunciado.border = true;
En las lneas de cdigo se puede ver como se aaden los cuadros de texto (dificultad,
solucin, enunciado, tema y Tid) al Sprite "texto". Ms adelante se pueden dejar de
visualizar todos con una nica lnea de cdigo que elimine el Sprite "texto" del escenario.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 51
Pg. 52
Memoria
700
Add.addChild(image);
701
}
704 //Boton aadir ejercicio//
En este cdigo se carga una imagen que servir como botn para aadir nuevos ejercicios a
los fichero de datos. Lo primero que se hace es crear un objeto Loader mediante la llamada
new Loader,. A continuacin se le aade una escucha a este Loader (este elemento de la
programacin se explicar ms adelante). En la siguiente lnea de cdigo (692) se le indica
al Loader que empiece a cargar (load) la imagen y se le seala la ubicacin donde se
encuentra. Una vez finalizada la carga de la informacin se ejecuta la funcin
onCompleteAdd, la cual crea un nuevo objeto de clase BitmapData (lnea 695) y le pasa la
informacin cargada. Despus se crea un objeto Bitmap (lnea 694) al que se le pasa el
objeto BitmapData y crea la representacin de la imagen que se mostrar por pantalla. Por
ltimo, se aade la imagen a la lista de visualizacin de un Sprite creado anteriormente
(lnea 700) para poder visualizar la imagen por pantalla.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 53
Pg. 54
Memoria
En las lneas 57 y 58 se eliminan los botones y las imgenes, como se indica en el Esquema
6.1. En la lnea 54 se hace una llamada a la clase "Menu" que cargar la pantalla del men
as como los botones de este. El funcionamiento del resto de pantallas es idntico a este
pero con sus propios elementos.
6.3 Eventos
Los eventos son los responsables de ejecutar las diferentes acciones que ha de realizar la
app dependiendo de la interaccin del usuario o de otras muchas acciones que se ejecutan
internamente sin intervencin del usuario. Un evento se puede comparar a una alarma
interna lanzada por la app. Esta alarma avisa al motor de ejecucin de que algn suceso,
que nosotros hemos definido previamente, se ha completado. Es por esto que los eventos
son la herramienta fundamental utilizada para la interaccin de la app con el usuario.
Los eventos se empaquetan en una clase principal llamada Events (13) (14). Esta clase es
la encargada de escuchar las alarmas de los diferentes eventos a travs de los
EventListeners y de disparar algunos eventos genricos. Para disparar la alarma de un
evento, y que pueda ser escuchada, se utilizan las clases especficas de los diferentes
eventos dependiendo de su naturaleza. Por ejemplo, para detectar un toque en la pantalla
se utiliza la clase TouchEvent o bien MouseEvent. La clase de cada evento se encarga tanto
de controlar las acciones que dispararn un evento as como de dispararlo. Para indicarle a
la app los eventos que han de ser escuchados se utilizan las escuchas (listeners). Estas
escuchas se aaden en los diferentes objetos de programacin segn interese. De esta
manera ser el objeto al que est asociado la escucha el que me proporcione la informacin
necesaria para realizar la accin indicada.
Todos los botones utilizan los eventos para realizar la funcin que les corresponde. A travs
de las imgenes externas cargadas se crea la imagen de los botones y posteriormente se
les aade un listener al Sprite que las contiene. Cada botn ha de estar en un Sprite
diferente porque a un mapa de bits no se le puede poner un listener, pero a un Sprite s.
lista1.addEventListener(MouseEvent.CLICK, onClickRegistro1);
lista2.addEventListener(MouseEvent.CLICK, onClickRegistro1);
lista3.addEventListener(MouseEvent.CLICK, onClickRegistro1);
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
200
201
Pg. 55
lista4.addEventListener(MouseEvent.CLICK, onClickRegistro1);
lista5.addEventListener(MouseEvent.CLICK, onClickRegistro1);
En este ejemplo se puede observar como a los objetos lista1 - lista5 se les ha aadido una
escucha para eventos tipo MouseEvent.CLICK. A continuacin del evento se indica la
funcin que se ejecutar cuando se escuche ese evento. Dentro de esta funcin se aaden
todas las acciones que se quieran ejecutar tras escuchar el evento. Las cinco escuchas
ejecutan la misma funcin "onClickRegitro1", pero desde objetos diferentes. Esto es debido
a que cada objeto proporciona informacin especfica de l mismo para que la funcin acte
en consecuencia. En concreto en este cdigo, los objetos lista1 - lista5 son los elementos de
la lista de ejercicios que se est mostrando por pantalla. A tocar uno de ellos con el dedo la
app tiene informacin de qu elemento se ha tocado y, por lo tanto, sobre que elemento se
actuar.
Una de las caractersticas singulares de los eventos en AS3 y que dificulta un poco su
programacin es que las funciones que son ejecutadas por las escuchas, en nuestro caso
sera la funcin "onClickRegistro1", no admiten la entrada de parmetros ni devuelven
parmetros, es decir, no se les puede pasar ninguna variable para que la utilicen y tampoco
pueden devolver ninguna informacin. La programacin cuenta con que se le pase toda la
informacin a la funcin a travs del objeto que tiene la escucha.
Pg. 56
Memoria
utilizados como botones. Se trata, por tanto, de otro de los elementos ms utilizados en el
cdigo de la app.
La clase que agrupa y gestiona los cuadros de texto es TextField. Esta clase controla el
texto que debe ser mostrado por pantalla y con qu caractersticas se ha de hacer. Adems,
el teclado nativo del dispositivo tambin est gestionado por esta clase. Existen tres modos
en los que puede trabajar esta clase: Output, Input o Dynamic. En la presente app slo se
han utilizado los dos primeros modos, de tal manera que para mostrar el texto al usuario se
utiliza el modo Output y para recoger los datos de texto introducidos por el usuario se utiliza
el modo Input.
Existen varias clases que complementan la funcionalidad de la clase TextField. Por ejemplo,
para dar un formato concreto al texto se utilizan las clases TextFormat y TextFormatAlign o
para indicar como se han de modificar las dimensiones del cuadro de texto, se utiliza la
clase TextFieldAutoSize.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
81
Pg. 57
texto.addChild(enunciado);
Pg. 58
Memoria
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 59
La clase utilizada para comunicarse con el servidor es URLRequest y la clase para enviar y
descargar los archivos es URLLoader. La primera es la encargada de contener la
informacin de la conexin a la que acceder la segunda. La clase URLRequest es la
encargada de indicar si la conexin ser para descargar archivos (get) o envo de archivos
al servidor (post). Por defecto est configurada como mtodo "get". Una vez realizada la
conexin con el servidor es la clase URLLoader la que se encarga de iniciar la descarga y
gestionar la informacin obtenida.
A continuacin se muestra un ejemplo de obtencin de ficheros XML de un servidor:
32
33
34
35
36
37
Pg. 60
Memoria
7 Planificacin temporal
En este captulo se dar una visin temporal del proyecto, as como la planificacin que se
ha seguido a lo largo de su desarrollo. Se describen las fases principales del proyecto y las
acciones llevadas a cabo en cada una de ellas.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
acumulada (h)
Valoracin de ideas
10
Definicin de objetivos,
funcionalidades y requisitos
20
30
Datos y recursos
20
50
10
60
Modo de presentacin de
datos
20
80
Diseo Grfico
Duracin
5
Distribucin de pantallas y
botones
10
90
Diseo de botones y
pantallas
30
120
Aprendizaje
150
270
Programacin
250
520
40
560
funcionalidades
Diseo de
Brainstorm
Desarrollo
Definicin y requisitos
Duracin (h)
Redaccin de la memoria
Pg. 61
Pg. 62
Memoria
7.2 Cronologa
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 63
Coste acumulado ()
30
Ingeniero
900
900
Diseo de funcionalidades
50
Ingeniero
1.500
2.400
Diseo Grfico
40
Diseador
600
3.000
Desarrollo
400
Programador
8.000
11.000
Redaccin de la memoria
40
Ingeniero
1.200
12.200
Responsable
Definicin y requisitos
Duracin (h)
Coste ()
A continuacin se muestra una tabla con el desglose del tiempo invertido por fase del
proyecto:
Pg. 64
Memoria
A la vista del anterior cuadro, el coste total de los recursos humanos asciende a 12.200.
Cabe destacar que las horas dedicadas al desarrollo de la app es elevado porque incluye el
aprendizaje previo del lenguaje de programacin.
Valor ()
Amortizacin (meses)
Coste ()
Coste acumulado ()
amortizacin estimada:
PC
600
24
3.5
88
88
Dispositivo mvil
500
12
2.5
105
193
100
--
--
100
293
20/mes
--
20
313
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 65
se ha realizado el clculo por meses de utilizacin del recurso y de acuerdo a los meses que
se han considerado para su amortizacin.
Para la realizacin de este proyecto se utilizan ms herramientas que se pueden conseguir
de forma gratuita. Se explic, en el apartado 3.2, que tanto el entorno de desarrollo
FlashDevelop como la plataforma Adobe Air son gratuitas.
Coste ()
Costes materiales
TOTAL
12.200
313
12.513
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 67
9 Impacto medioambiental
El cambio tecnolgico que est experimentando la sociedad se traduce en un impacto
ambiental grave. Las tecnologas abarcan cada vez ms ambientes de la sociedad y se
convierten en un elemento indispensable. La necesidad de ciertos recursos minerales para
la fabricacin de dispositivos electrnicos as como toda la energa empleada por estos,
tanto en su fabricacin como su utilizacin, aumenta a medida que lo hace la demanda de
estos dispositivos.
Existen programas de reciclaje, as como directivas de la UE. La directiva de Residuos de
Aparatos Elctricos y Electrnicos (Directiva 2002/96/CE del Parlamento Europeo (18)), as
como el Real Decreto 208/2005 (19), regulan el reciclaje de aparatos electrnicos. En este
sentido, el impacto ambiental de la tecnologa se intenta paliar con el reciclaje de ciertos
componentes que forman parte de los aparatos electrnicos.
El presente proyecto tiene un impacto ambiental positivo. El hecho de incorporar a la
educacin la tecnologa presente en la sociedad no implica un aumento considerable de
dispositivos electrnicos. El impacto positivo se desprende de darle a la tecnologa presente
en la educacin ms herramientas para disminuir el consumo de otros recursos como puede
ser el papel.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 69
Conclusiones
A la hora de concluir este proyecto y reflexionar sobre todo lo que se ha realizado en l,
resalta un aspecto que ha sido fundamental para llevarlo a cabo. Se trata de todo lo
aprendido a lo largo de su ejecucin. A medida que se ha ido desarrollando se han adquirido
nuevos conocimientos. Para desarrollar algunas partes de este proyecto se ha requerido de
una investigacin intensa que ha aportado nuevos conocimientos y puntos de vista a su
ejecutor. Ha sido una gran oportunidad para introducirse en el mundo de la programacin y
aprender sobre el desarrollo de apps.
Por otro lado, la app resultante de todo el trabajo realizado es un elemento que podr
utilizarse en un futuro prximo. Actualmente se trata de una herramienta para la enseanza
de las matemticas, pero gracias a la estructura utilizada para su programacin puede
convertirse fcilmente en una herramienta transversal para ms asignaturas.
Tambin hay que considerar que el resultado de este proyecto est enfocado y programado
para un sistema operativo concreto, pero, una vez ms, gracias a las herramientas utilizadas
puede implementarse fcilmente en otros sistemas operativos.
Tras realizar este proyecto queda por delante el trabajo de puesta a punto y mejora de la
app. Se trata de un trabajo no menos importante que el realizado a lo largo de estas
pginas. Actualmente existen posibilidades de introducir una prueba piloto durante el curso
2015/2016 en una institucin educativa. Durante un tiempo se realizara su testeo y puesta a
punto en esta institucin. Una vez realizadas estas pruebas se decidir si se puede
comercializar, incluso si se puede lanzar acompaada de otras apps que puedan surgir a
raz de esta y de su utilizacin.
El desarrollo de este proyecto y todo el esfuerzo puesto en l ha sido una oportunidad para
poner en prctica gran cantidad de conocimientos y habilidades aprendidas durante estos
aos de estudio.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 71
Agradecimientos
A Llus Solano, director de este proyecto, por la buena acogida que dio a la idea que se le
propuso y por su dedicacin de tiempo para guiarlo y llevarlo a buen puerto.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 73
Bibliografa
9.1 Referencias bibliogrficas
1. 2014 Apple Inc. Apple Education. [En lnea]
https://www.apple.com/es/education/mac/resources/.
2. Richardson, Darren y Milbourne, Paul. A brief history of ActionScript. Fundation
ActionScript 3.0 for Flash an Flex. EEUU : s.n., 2009.
3. 2008 Adobe Systems Incorporated. Trabajo con objetos. Programacin con ADOBE
ACTIONSCRIPT 3.0. California 95110, USA : s.n., 2008.
4. . Herencia. Programacin con ADOBE ACTIONSCRIPT 3.0. California 95110,
USA : s.n., 2008, pgs. 111-119.
5. 2014 Adobe Systems Incorporated. Adobe. [En lnea] 27 de Junio de 2006.
http://www.adobe.com/devnet/actionscript/articles/actionscript3_overview.html.
6. TIOBE. TIBOE software BV. [En lnea]
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html.
7. FLASHDEVELOP.ORG 2005-2013. FlashDevelop Open source code editor. [En lnea]
http://www.flashdevelop.org/.
8. 2014 Adobe Systems Software Ireland Ltd. Adobe. [En lnea]
http://get.adobe.com/es/air/.
9. S.L., Edertone Advanced Solutions. Edertone Software Engineering. [En lnea]
http://www.edertone.com/es/Services_ria/.
10. 2014 Adobe Systems Incorporated and its licensors. Captulo 1: Acerca de Adobe
AIR. Creacin de aplicaciones de ADOBE AIR. California 95110, USA : s.n., Ultima
modificacin 18/11/2013, pg. 1.
11. Lott, Joey, Schall, Darron y Peters, Keith. XML. ActionScript 3.0 para desarrolladores
Flash. Madrid, Espaa : ANAYA MULTIMEDIA (GRUPO ANAYA, S.A.), 2007, pg. 539 y ss.
12. 2008 Adobe Systems Incorporated. Captulo 11: Trabajo con XML. Programacin
con ACTIONSCRIPT 3.0. California 95110, USA : s.n., 2008, pg. 232 y ss.
Pg. 74
Memoria
13. Lott, Joey, Schall, Darron y Peters, Keith. Capitulo 6: Lista de visualizacin.
ActionScript 3.0 para desarrolladores Flash. Madrid, Espaa : ANAYA MULTIMEDIA
(GRUPO ANAYA, S.A.), 2007, pg. 185 y ss.
14. . Carga de imagen externa en un mapa de bits. ActionScript 3.0 para desarrolladores
Flash. Madrid, Espaa : ANAYA MULTIMEDIA (GRUPO ANAYA, S.A.), 2007, pg. 257 y ss.
15. . Gestionar eventos. ActionScript 3.0 para desarrolladores Flash. Madrid, Espaa :
ANAYA MULTIMEDIA (GRUPO ANAYA, S.A.), 2007, pg. 37 y ss.
16. 2008 Adobe Systems Incorporated. Captulo 12 Gestin de eventos. Programacin
con ADOBE ACTIONSCRIPT 3.0. California 95110, USA : s.n., 2008, pg. 254 y ss.
17. Lott, Joey, Schall, Darron y Peters, Keith. Capitulo 17: Almacenar datos persistentes.
ActionScript 3.0 para desarrolladores Flash. Madrid, Espaa : ANAYA MULTIMEDIA
(GRUPO ANAYA, S.A.), 2007, pg. 489 y ss.
18. Diario Oficial de la Unin Europea. DIRECTIVA 2002/96/CE DEL PARLAMENTO
EUROPEO Y DEL CONSEJO de 27 de enero de 2003 sobre residuos de aparatos
elctricos y electrnicos (RAEE). 2003.
19. BOE. REAL DECRETO 208/2005, de 25 de febrero, sobre aparatos elctricos y
electrnicos y la gestin de sus residuos. Madrid : s.n., 2005.
Diseo y desarrollo de una aplicacin mvil para la enseanza de las matemticas en la ESO
Pg. 75
Anexos
Anexo I: Cdigo de programacin
En este anexo se recoge todo el cdigo utilizado para la programacin de la app. Se ha
incluido al final del cdigo el archivo descriptor de la app.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package
{
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
flash.display.Bitmap;
flash.display.BitmapData;
flash.display.Loader;
flash.display.Sprite;
flash.events.Event;
flash.events.MouseEvent;
flash.filesystem.File;
flash.filesystem.FileMode;
flash.filesystem.FileStream;
flash.net.FileReference;
flash.net.URLRequest;
flash.text.TextField;
flash.text.TextFieldAutoSize;
flash.text.TextFieldType;
flash.ui.Multitouch;
flash.ui.MultitouchInputMode;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
{
import
import
import
import
import
import
import
flash.display.Bitmap;
flash.display.BitmapData;
flash.display.Loader;
flash.display.Sprite;
flash.events.Event;
flash.events.MouseEvent;
flash.net.URLRequest;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
E.addEventListener(MouseEvent.CLICK, onClickEjercicios);
botonera.addChild(E);
function onClickEjercicios(evt:MouseEvent):void {
botonera.name = evt.target.name;
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
}
//Ejercicios//
//Prueba app alumnos//
var loadP:Loader = new Loader();
loadP.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompletePrueba);
loadP.load(new URLRequest("app:/Prueba.png"));
function oncompletePrueba(event:Event):void {
var image:Bitmap = Bitmap(loadP.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 95;
image.y = 300;
image.width = 200;
image.height = 200;
P.addChild(image);
}
P.buttonMode = true;
P.name = "P";
P.addEventListener(MouseEvent.CLICK, onClickPrueba);
botonera.addChild(P);
function onClickPrueba(event:MouseEvent):void {
botonera.name = event.target.name;
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
}
//Prueba app alumnos//
//Crear deberes//
var loadD:Loader = new Loader();
loadD.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteDeberes);
loadD.load(new URLRequest("app:/CrearDeberes.png"));
function oncompleteDeberes(event:Event):void {
var image:Bitmap = Bitmap(loadD.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 345;
image.y = 300;
image.width = 200;
image.height = 200;
D.addChild(image);
}
D.buttonMode = true;
D.name = "D";
D.addEventListener(MouseEvent.CLICK, onClickCrear);
botonera.addChild(D);
function onClickCrear(event:MouseEvent):void {
botonera.name = event.target.name;
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
}
//Crear deberes//
//Carrera//
var loadC:Loader = new Loader();
loadC.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteCarrera);
loadC.load(new URLRequest("app:/Carrera.png"));
function oncompleteCarrera(event:Event):void {
var image:Bitmap = Bitmap(loadC.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 95;
image.y = 550;
image.width = 200;
image.height = 200;
C.addChild(image);
}
C.buttonMode = true;
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
C.name = "C";
C.addEventListener(MouseEvent.CLICK, onClickCarrera);
botonera.addChild(C);
function onClickCarrera(event:MouseEvent):void {
botonera.name = event.target.name;
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
}
//Carrera//
//Carga archivos al servidor//
var loadV:Loader = new Loader();
loadV.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteVisualizar);
loadV.load(new URLRequest("app:/Visualizar.jpg"));
function oncompleteVisualizar(event:Event):void {
var image:Bitmap = Bitmap(loadV.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 345;
image.y = 550;
image.width = 200;
image.height = 200;
V.addChild(image);
}
V.buttonMode = true;
V.name = "V";
V.addEventListener(MouseEvent.CLICK, onClickVisualizar);
botonera.addChild(V);
function onClickVisualizar(event:MouseEvent):void {
botonera.name = event.target.name;
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
}
//Carga archivos al servidor//
//Funcion servidor//
function mBotones(evt:Event):void {
botonera.x -= 80;
if (botonera.x == -80) {
var boton:String = evt.target.name;
if (boton == "RA") {
new CursosAlumnos(pantalla, capa);
}else if (boton == "E") {
new Ejercicios(pantalla);
}else if (boton == "P") {
new ProbarApp(pantalla, capa);
} else if (boton == "D") {
new SeleccionArchivo(pantalla, capa);
}else if(boton=="C") {
new Carrera(pantalla);
} else if (boton == "V") {
new VerResultados(pantalla);
}
} else if (botonera.x <= -640) {
botonera.removeEventListener(Event.ENTER_FRAME, mBotones);
pantalla.removeChild(botonera);
}
}
//Pantallazos//
pantalla.addChild(botonera);
//Pantallazos//
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
{
import
import
import
import
import
import
import
import
import
import
import
flash.display.Sprite;
flash.display.Loader;
flash.net.URLRequest;
flash.events.Event;
flash.display.Bitmap;
flash.display.BitmapData;
flash.events.MouseEvent;
flash.text.StyleSheet;
flash.text.TextField;
flash.text.TextFormat;
flash.text.TextFieldAutoSize;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
function oncompleteRegistro4(evt:Event):void
{
var image4:Bitmap = Bitmap(loader4.content);
var bitmap4:BitmapData = image4.bitmapData;
image4.width = 250;
image4.height = 250;
image4.x = 345;
image4.y = 400;
cuarto.addChild(image4);
var cua:TextField = new TextField();
cua.text = "4 ESO";
cua.wordWrap = true;
cua.width = 150;
cua.x = 480;
cua.y = 450;
cua.setTextFormat(tformat);
cuarto.name = "4";
cuarto.addChild(cua);
cuarto.buttonMode = true;
cuarto.mouseChildren = false;
cuarto.addEventListener(MouseEvent.CLICK, onClick);
botonera.addChild(cuarto);
}
function onClick(evt:MouseEvent):void {
c = int(evt.target.name);
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
}
function mBotones(evt:Event):void {
botonera.x -= 80;
if (botonera.x == -80) {
new ClasesAlumnos(pan, c, capa);
}
if (botonera.x == -640) {
botonera.removeEventListener(Event.ENTER_FRAME, mBotones);
pan.removeChild(botonera);
}
}
var loaderBack:Loader = new Loader();
loaderBack.load(new URLRequest("app:/Back.png"));
loaderBack.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteBack);
function oncompleteBack(evt:Event):void
{
var imageBack:Bitmap = Bitmap(loaderBack.content);
var bitmapBack:BitmapData = imageBack.bitmapData;
imageBack.width = 100;
imageBack.height = 100;
imageBack.x = 0;
imageBack.y = 860;
back.addChild(imageBack);
back.buttonMode = true;
back.addEventListener(MouseEvent.CLICK, onClickBack);
botonera.addChild(back);
}
function onClickBack(event:MouseEvent):void
{
botonera.addEventListener(Event.ENTER_FRAME, mPantallaBack);
function mPantallaBack(evt:Event):void {
botonera.x += 80;
if (botonera.x == 80) {
new Menu(pan);
} else if (botonera.x >= 640) {
botonera.removeEventListener(Event.ENTER_FRAME, mPantallaBack);
pan.removeChild(botonera);
}
}
}
pan.addChild(botonera);
214
215
216
217
218
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
{
import
import
import
import
import
import
import
import
import
import
import
flash.display.Sprite;
flash.display.Loader;
flash.net.URLRequest;
flash.events.Event;
flash.display.Bitmap;
flash.display.BitmapData;
flash.events.MouseEvent;
flash.text.StyleSheet;
flash.text.TextField;
flash.text.TextFormat;
flash.text.TextFieldAutoSize;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
A.mouseChildren = false;
var pri:TextField = new TextField();
pri.text = curso +" ESO A";
pri.wordWrap = true;
pri.width = 150;
pri.x = 150;
pri.y = 150;
pri.setTextFormat(tformat);
A.name = "A";
A.addChild(pri);
A.buttonMode = true;
A.addEventListener(MouseEvent.CLICK, onClick);
botonera.addChild(A);
}
var loader2:Loader = new Loader();
loader2.load(new URLRequest("app:/Alumnos.png"));
loader2.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteRegistro2);
function oncompleteRegistro2(evt:Event):void
{
var image2:Bitmap = Bitmap(loader2.content);
var bitmap2:BitmapData = image2.bitmapData;
image2.width = 250;
image2.height = 250;
image2.x = 345;
image2.y = 100;
B.addChild(image2);
B.buttonMode = true;
B.mouseChildren = false;
var seg:TextField = new TextField();
seg.text = curso + " ESO B";
seg.wordWrap = true;
seg.width = 150;
seg.x = 450;
seg.y = 150;
seg.setTextFormat(tformat);
B.name = "B";
B.addChild(seg);
B.addEventListener(MouseEvent.CLICK, onClick);
botonera.addChild(B);
}
var loader3:Loader = new Loader();
loader3.load(new URLRequest("app:/Alumnos.png"));
loader3.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteRegistro3);
function oncompleteRegistro3(evt:Event):void
{
var image3:Bitmap = Bitmap(loader3.content);
var bitmap3:BitmapData = image3.bitmapData;
image3.width = 250;
image3.height = 250;
image3.x = 45;
image3.y = 400;
C.addChild(image3);
C.buttonMode = true;
C.mouseChildren = false;
var ter:TextField = new TextField();
ter.text = curso + " ESO C";
ter.wordWrap = true;
ter.width = 150;
ter.x = 150;
ter.y = 450;
ter.setTextFormat(tformat);
C.name = "C";
C.addChild(ter);
C.addEventListener(MouseEvent.CLICK, onClick);
botonera.addChild(C);
}
var loader4:Loader = new Loader();
loader4.load(new URLRequest("app:/Alumnos.png"));
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
loader4.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteRegistro4);
function oncompleteRegistro4(evt:Event):void
{
var image4:Bitmap = Bitmap(loader4.content);
var bitmap4:BitmapData = image4.bitmapData;
image4.width = 250;
image4.height = 250;
image4.x = 345;
image4.y = 400;
D.addChild(image4);
var cua:TextField = new TextField();
cua.text = curso + " ESO D";
cua.wordWrap = true;
cua.width = 150;
cua.x = 450;
cua.y = 450;
cua.setTextFormat(tformat);
D.addChild(cua);
D.buttonMode = true;
D.name = "D";
D.mouseChildren = false;
D.addEventListener(MouseEvent.CLICK, onClick);
botonera.addChild(D);
}
function onClick(evt:MouseEvent):void {
c = evt.target.name;
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
}
function mBotones(evt:Event):void {
botonera.x -= 80;
if (botonera.x == -80) {
new RegistroAlumnos(pan,curso, c, capa);
}
if (botonera.x == -640) {
botonera.removeEventListener(Event.ENTER_FRAME, mBotones);
pan.removeChild(botonera);
}
}
var loaderBack:Loader = new Loader();
loaderBack.load(new URLRequest("app:/Back.png"));
loaderBack.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteBack);
function oncompleteBack(evt:Event):void
{
var imageBack:Bitmap = Bitmap(loaderBack.content);
var bitmapBack:BitmapData = imageBack.bitmapData;
imageBack.width = 100;
imageBack.height = 100;
imageBack.x = 0;
imageBack.y = 860;
back.addChild(imageBack);
back.buttonMode = true;
botonera.addChild(back);
back.addEventListener(MouseEvent.CLICK, onClickBack);
}
function onClickBack(event:MouseEvent):void
{
botonera.addEventListener(Event.ENTER_FRAME, mPantallaBack);
function mPantallaBack(evt:Event):void {
botonera.x += 80;
if (botonera.x == 80) {
new CursosAlumnos(pan, capa);
} else if (botonera.x >= 640) {
botonera.removeEventListener(Event.ENTER_FRAME, mPantallaBack);
pan.removeChild(botonera);
}
}
}
214
215
216
217
218
219
pan.addChild(botonera);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
{
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
adobe.utils.ProductManager;
flash.desktop.InteractiveIcon;
flash.events.MouseEvent;
flash.display.DisplayObject;
flash.filesystem.File;
flash.filesystem.FileMode;
flash.filesystem.FileStream;
flash.globalization.Collator;
flash.net.SharedObject;
flash.net.URLLoader;
flash.text.TextField;
flash.text.TextFieldType;
flash.text.TextFieldAutoSize;
flash.display.Sprite;
flash.net.FileReference;
flash.events.Event;
flash.events.MouseEvent;
flash.display.Loader;
flash.net.URLRequest;
flash.display.Bitmap;
flash.display.BitmapData;
flash.text.TextFormat;
flash.text.TextFormatAlign;
flash.ui.Mouse;
flash.events.EventDispatcher;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
contrasea.maxChars = 8;
contrasea.defaultTextFormat=formato;
texto.addChild(contrasea);
pan.addChild(texto);
//Listado de alumnos//
//primera pantalla//
var i:int;
var offsety:int;
var n:int = 0;
var j:int = 0;
var dis:int = 0;
var lista:Sprite = new Sprite();
var lista1:Sprite = new Sprite();
var nom:TextField;
var cont:TextField;
actualizarpantalla();
lista.addEventListener(MouseEvent.CLICK, onClickRegistro);
lista1.addEventListener(MouseEvent.CLICK, onClickRegistro);
botonera.addChild(lista);
botonera.addChild(lista1);
//primera pantalla//
function onClickAdelante(evt:MouseEvent):void {
j++;
actualizarpantalla();
}
function onClickAtras(evt:MouseEvent):void {
j--;
actualizarpantalla();
}
var index:int;
var display:int;
function onClickRegistro(evt:MouseEvent):void {
if (i >0 && display<=dis-1) {
TextField(lista.getChildAt(display)).background = false;
TextField(lista1.getChildAt(display)).background = false;
}
display = int(evt.target.name);
index = display + 12 * j;
var str:String = TextField(lista.getChildAt(display)).text;
var str1:String = TextField(lista1.getChildAt(display)).text;
nombretext.text = str;
contrasea.text = str1;
TextField(lista.getChildAt(display)).background = true;
TextField(lista.getChildAt(display)).backgroundColor = 0x99ccff;
TextField(lista1.getChildAt(display)).background = true;
TextField(lista1.getChildAt(display)).backgroundColor = 0x99ccff;
GA.removeEventListener(MouseEvent.CLICK, onClickGuardarAlumno);
if (!GA.hasEventListener(MouseEvent.CLICK)){
GA.addEventListener(MouseEvent.CLICK, onCambiarAlumno);
}
if (!E.hasEventListener(MouseEvent.CLICK)){
E.addEventListener(MouseEvent.CLICK, onClickE);
}
}
function onCambiarAlumno(evt:MouseEvent):void {
registro.alumno[index].nombre = nombretext.text;
registro.alumno[index].contrasea = contrasea.text;
GA.removeEventListener(MouseEvent.CLICK, onCambiarAlumno);
GA.addEventListener(MouseEvent.CLICK, onClickGuardarAlumno);
E.removeEventListener(MouseEvent.CLICK, onClickE);
actualizarpantalla();
}
function onClickE(evt:MouseEvent):void {
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
delete registro.alumno[index];
texto.removeChild(nombretext);
texto.removeChild(contrasea);
nombretext = new TextField();
nombretext.type = TextFieldType.INPUT;
nombretext.border = true;
nombretext.x = 185;
nombretext.y = 60;
nombretext.width = 400;
nombretext.height = 40;
nombretext.setTextFormat(formato);
nombretext.defaultTextFormat = formato;
texto.addChild(nombretext);
contrasea= new TextField();
contrasea.x = 185;
contrasea.y = 120;
contrasea.width = 150;
contrasea.height = 40;
contrasea.border = true;
contrasea.type = TextFieldType.INPUT;
contrasea.setTextFormat(formato);
contrasea.maxChars = 8;
contrasea.defaultTextFormat=formato;
texto.addChild(contrasea);
actualizarpantalla();
GA.removeEventListener(MouseEvent.CLICK, onCambiarAlumno);
GA.addEventListener(MouseEvent.CLICK, onClickGuardarAlumno);
E.removeEventListener(MouseEvent.CLICK, onClickE);
}
function actualizarpantalla():void {
if (dis > 0) {
lista.removeChildren(0, dis - 1);
lista1.removeChildren(0, dis - 1);
}
var iactual:int = 12 * j;
offsety = 0;
i = 0;
dis = 0;
for (var pname:String in registro.alumno)
{
if(iactual<=i && i<iactual+12){
nom = new TextField();
cont = new TextField();
nom.name = dis.toString();
cont.name = dis.toString();
nom.x = 20;
nom.y = 220 + offsety;
cont.x = 430;
cont.y = 220 + offsety;
nom.width = 410;
nom.height = 40;
cont.width = 150;
cont.height = 40;
nom.setTextFormat(formato);
nom.defaultTextFormat = formato;
cont.setTextFormat(formato);
cont.defaultTextFormat = formato;
nom.text = registro.alumno.nombre[pname];
cont.text = registro.alumno.contrasea[pname];
lista.addChild(nom);
lista1.addChild(cont);
offsety = offsety + 50;
dis++;
}
i++;
actualizarn();
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
}
if (n>j && !Adelante.hasEventListener(MouseEvent.CLICK) ) {
Adelante.addEventListener(MouseEvent.CLICK, onClickAdelante);
}else if(n==j && Adelante.hasEventListener(MouseEvent.CLICK)){
Adelante.removeEventListener(MouseEvent.CLICK, onClickAdelante);
}
if (j > 0 && !Atras.hasEventListener(MouseEvent.CLICK)) {
Atras.addEventListener(MouseEvent.CLICK, onClickAtras);
}else if (j == 0 && Atras.hasEventListener(MouseEvent.CLICK)) {
Atras.removeEventListener(MouseEvent.CLICK, onClickAtras);
}
}
function actualizarn():void {
n = Math.floor((i-1) / 12);
}
//Listado de alumnos//
//Nuevo Alumno//
var loadNA:Loader = new Loader();
loadNA.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteNuevoAlumno);
loadNA.load(new URLRequest("app:/Nuevo.png"));
function oncompleteNuevoAlumno(event:Event):void {
var image:Bitmap = Bitmap(loadNA.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 540;
image.y = 860;
image.width = 100;
image.height = 100;
NA.addChild(image);
}
NA.buttonMode = true;
NA.addEventListener(MouseEvent.CLICK, onClickNuevoAlumno);
botonera.addChild(NA);
function onClickNuevoAlumno(evt:MouseEvent):void {
var xml:XML =
<alumno>
<nombre>{nombretext.text}</nombre>
<contrasea>{contrasea.text}</contrasea>
<puntos>
<aciertos></aciertos>
<errores></errores>
<intentos></intentos>
</puntos>
</alumno>;
if ((nombretext.length>0 || contrasea.length>0)){
texto.removeChild(nombretext);
texto.removeChild(contrasea);
registro.appendChild(xml);
nombretext = new TextField();
nombretext.type = TextFieldType.INPUT;
nombretext.border = true;
nombretext.x = 185;
nombretext.y = 60;
nombretext.width = 400;
nombretext.height = 40;
nombretext.setTextFormat(formato);
nombretext.defaultTextFormat = formato;
texto.addChild(nombretext);
contrasea= new TextField();
contrasea.x = 185;
contrasea.y = 120;
contrasea.width = 150;
contrasea.height = 40;
contrasea.border = true;
contrasea.type = TextFieldType.INPUT;
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
contrasea.setTextFormat(formato);
contrasea.maxChars = 8;
contrasea.defaultTextFormat=formato;
texto.addChild(contrasea);
}
actualizarpantalla();
}
//Nuevo Alumno//
//Guardar Alumno//
var loadGA:Loader = new Loader();
loadGA.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteGuardarAlumno);
loadGA.load(new URLRequest("app:/Guardar.jpg"));
function oncompleteGuardarAlumno(event:Event):void {
var image:Bitmap = Bitmap(loadGA.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 430;
image.y = 860;
image.width = 100;
image.height = 100;
GA.addChild(image);
}
GA.buttonMode = true;
GA.addEventListener(MouseEvent.CLICK, onClickGuardarAlumno);
botonera.addChild(GA);
function onClickGuardarAlumno(evt:MouseEvent):void {
var xml:XML =
<alumno>
<nombre>{nombretext.text}</nombre>
<contrasea>{contrasea.text}</contrasea>
<puntos>
<aciertos></aciertos>
<errores></errores>
<intentos></intentos>
</puntos>
</alumno>;
registro.appendChild(xml);
actualizarpantalla();
}
//Guardar Alumno//
//Eliminar Alumno//
var loadE:Loader = new Loader();
loadE.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteE);
loadE.load(new URLRequest("app:/Eliminar.png"));
function onCompleteE(event:Event):void {
var image:Bitmap = Bitmap(loadE.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 320;
image.y = 860;
image.width = 100;
image.height = 100;
E.addChild(image);
}
E.buttonMode = true;
botonera.addChild(E);
//Eliminar Archivo//
//Botones navegacin por los registros//
var loadAdelante:Loader = new Loader();
loadAdelante.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteAdelante);
loadAdelante.load(new URLRequest("app:/RegistroAdelante.jpg"));
function onCompleteAdelante(event:Event):void {
var image:Bitmap = Bitmap(loadAdelante.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 210;
image.y = 860;
image.width = 100;
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
image.height = 100;
Adelante.addChild(image);
}
Adelante.buttonMode = true;
botonera.addChild(Adelante);
var loadAtras:Loader = new Loader();
loadAtras.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteAtras);
loadAtras.load(new URLRequest("app:/RegistroAtras.png"));
function onCompleteAtras(event:Event):void {
var image:Bitmap = Bitmap(loadAtras.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 110;
image.y = 860;
image.width = 100;
image.height = 100;
Atras.addChild(image);
}
Atras.buttonMode = true;
botonera.addChild(Atras);
//Botones navegacin por los registros//
//Volver al menu//
var loadBack:Loader = new Loader();
loadBack.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteBack);
loadBack.load(new URLRequest("app:/Back.png"));
function onCompleteBack(event:Event):void {
var image:Bitmap = Bitmap(loadBack.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 0;
image.y = 860;
image.width = 100;
image.height = 100;
back.addChild(image);
}
back.buttonMode = true;
back.addEventListener(MouseEvent.CLICK, onClickBack);
botonera.addChild(back);
function onClickBack(evt:MouseEvent):void {
Reg.data.xml = registro;
Reg.flush(3000);
botonera.addEventListener(Event.ENTER_FRAME, mPantallaBack);
function mPantallaBack(evt:Event):void {
botonera.x += 80;
texto.x += 80;
if (botonera.x == 80) {
new ClasesAlumnos(pan, cursoid, capa);
} else if (botonera.x >= 640) {
botonera.removeEventListener(Event.ENTER_FRAME, mPantallaBack);
pan.removeChild(texto);
pan.removeChild(botonera);
}
}
}
//Volver al menu//
pan.addChild(botonera);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
{
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
flash.display.Bitmap;
flash.display.BitmapData;
flash.display.Loader;
flash.display.Sprite;
flash.events.Event;
flash.events.MouseEvent;
flash.filesystem.File;
flash.net.FileReference;
flash.net.NetConnection;
flash.net.URLLoader;
flash.net.URLRequest;
flash.net.navigateToURL;
flash.text.TextField;
flash.text.TextFieldAutoSize;
flash.text.TextFieldType;
flash.text.TextFormat;
flash.text.TextFormatAlign;
flash.net.SharedObject;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
Tenunciado.setTextFormat(formato);
texto.addChild(Tenunciado);
var enunciado:TextField = new TextField();
enunciado.type = TextFieldType.INPUT;
enunciado.border = true;
enunciado.x = 20;
enunciado.y = 100;
enunciado.width = 600;
enunciado.height = 300;
enunciado.wordWrap = true;
enunciado.setTextFormat(formato);
enunciado.defaultTextFormat = formato;
texto.addChild(enunciado);
//Selecciona la id del problema a introducir//
var iGuardar:int = 0;
for (var pname:String in problemas.problema)
{
if (problemas.problema.@id[pname] < iGuardar)
{
} else {
iGuardar = problemas.problema.@id[pname];
}
}
//Selecciona la id del problema a introducir//
var Tid:TextField = new TextField();
Tid.x = 570;
Tid.y = 60;
Tid.text = "Id:"+iGuardar;
Tid.autoSize = TextFieldAutoSize.LEFT;
Tid.setTextFormat(formato);
Tid.defaultTextFormat = formato;
texto.addChild(Tid);
var Tsolucion:TextField = new TextField();
Tsolucion.x = 20;
Tsolucion.y = 410;
Tsolucion.text = "Solucin:";
Tsolucion.autoSize = TextFieldAutoSize.LEFT;
Tsolucion.setTextFormat(formato);
texto.addChild(Tsolucion);
var solucion:TextField = new TextField();
solucion.type = TextFieldType.INPUT;
solucion.border = true;
solucion.x = 150;
solucion.y = 410;
solucion.width = 100;
solucion.height = 40;
solucion.setTextFormat(formato);
solucion.defaultTextFormat = formato;
texto.addChild(solucion);
var Ttema:TextField = new TextField();
Ttema.x = 260;
Ttema.y = 410;
Ttema.text = "Tema:";
Ttema.autoSize = TextFieldAutoSize.LEFT;
Ttema.setTextFormat(formato);
texto.addChild(Ttema);
var tema:TextField = new TextField();
tema.type = TextFieldType.INPUT;
tema.border = true;
tema.x = 350;
tema.y = 410;
tema.border;
tema.width = 100;
tema.height = 40;
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
tema.setTextFormat(formato);
tema.defaultTextFormat = formato;
texto.addChild(tema);
var Tdificultad:TextField = new TextField();
Tdificultad.x = 460;
Tdificultad.y = 410;
Tdificultad.text = "Dificultad:"
Tdificultad.autoSize = TextFieldAutoSize.LEFT;
Tdificultad.setTextFormat(formato);
texto.addChild(Tdificultad);
var dificultad:TextField = new TextField();
dificultad.type = TextFieldType.INPUT;
dificultad.border = true;
dificultad.x = 592;
dificultad.y = 410;
dificultad.width = 30;
dificultad.height = 40;
dificultad.restrict = "1-3";
dificultad.setTextFormat(formato);
dificultad.defaultTextFormat = formato;
texto.addChild(dificultad);
//Variables de texto//
//primera pantalla//
var i:int;
var offsety:int;
var n:int = 0;
var j:int = 0;
var dis:int = 0;
var lista:Sprite = new Sprite();
var lista1:Sprite = new Sprite();
var lista2:Sprite = new Sprite();
var lista3:Sprite = new Sprite();
var lista4:Sprite = new Sprite();
var idm:TextField;
var enun:TextField;
var sol:TextField;
var dif:TextField;
var tem:TextField;
var adelante:Boolean;
var atras:Boolean;
actualizarpantalla();
lista.addEventListener(MouseEvent.CLICK, onClickRegistro);
lista1.addEventListener(MouseEvent.CLICK, onClickRegistro);
lista2.addEventListener(MouseEvent.CLICK, onClickRegistro);
lista3.addEventListener(MouseEvent.CLICK, onClickRegistro);
lista4.addEventListener(MouseEvent.CLICK, onClickRegistro);
botonera.addChild(lista);
botonera.addChild(lista1);
botonera.addChild(lista2);
botonera.addChild(lista3);
botonera.addChild(lista4);
//primera pantalla//
var index:int;
var display:int;
function onClickRegistro(evt:MouseEvent):void {
if (i >0 && display<=dis-1) {
TextField(lista.getChildAt(display)).background = false;
TextField(lista1.getChildAt(display)).background = false;
TextField(lista2.getChildAt(display)).background = false;
TextField(lista3.getChildAt(display)).background = false;
TextField(lista4.getChildAt(display)).background = false;
}
display = int(evt.target.name);
index = display + 4 * j;
var str:String = TextField(lista.getChildAt(display)).text;
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
Tid.autoSize = TextFieldAutoSize.LEFT;
Tid.setTextFormat(formato);
Tid.defaultTextFormat = formato;
texto.addChild(Tid);
solucion = new TextField();
solucion.type = TextFieldType.INPUT;
solucion.border = true;
solucion.x = 150;
solucion.y = 410;
solucion.width = 100;
solucion.height = 40;
solucion.setTextFormat(formato);
solucion.defaultTextFormat = formato;
texto.addChild(solucion);
tema = new TextField();
tema.type = TextFieldType.INPUT;
tema.border = true;
tema.x = 350;
tema.y = 410;
tema.border;
tema.width = 100;
tema.height = 40;
tema.setTextFormat(formato);
tema.defaultTextFormat = formato;
texto.addChild(tema);
dificultad = new TextField();
dificultad.type = TextFieldType.INPUT;
dificultad.border = true;
dificultad.x = 592;
dificultad.y = 410;
dificultad.width = 30;
dificultad.height = 40;
dificultad.restrict = "1-3";
dificultad.setTextFormat(formato);
dificultad.defaultTextFormat = formato;
texto.addChild(dificultad);
actualizarpantalla();
G.removeEventListener(MouseEvent.CLICK, onCambiarAlumno);
G.addEventListener(MouseEvent.CLICK, onClickGuardar);
E.removeEventListener(MouseEvent.CLICK, onClickE);
}
function onClickAdelante(evt:MouseEvent):void {
j++;
actualizarpantalla();
}
function onClickAtras(evt:MouseEvent):void {
j--;
actualizarpantalla();
}
function actualizarpantalla():void {
if (dis>0){
lista.removeChildren(0, dis - 1);
lista1.removeChildren(0, dis - 1);
lista2.removeChildren(0, dis - 1);
lista3.removeChildren(0, dis - 1);
lista4.removeChildren(0, dis - 1);
}
var iactual:int = 4 * j;
offsety = 0;
i = 0;
dis = 0;
for (var pname:String in problemas.problema)
{
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
solucion.defaultTextFormat = formato;
texto.addChild(solucion);
tema = new TextField();
tema.type = TextFieldType.INPUT;
tema.border = true;
tema.x = 350;
tema.y = 410;
tema.border;
tema.width = 100;
tema.height = 40;
tema.setTextFormat(formato);
tema.defaultTextFormat = formato;
texto.addChild(tema);
dificultad = new TextField();
dificultad.type = TextFieldType.INPUT;
dificultad.border = true;
dificultad.x = 592;
dificultad.y = 410;
dificultad.width = 30;
dificultad.height = 40;
dificultad.restrict = "1-3";
dificultad.setTextFormat(formato);
dificultad.defaultTextFormat = formato;
texto.addChild(dificultad);
actualizarpantalla();
}
function onClickBack(evt:MouseEvent):void {
var Prob:SharedObject = SharedObject.getLocal("problemas");
Prob.data.xml = problemas;
Prob.flush(3000);
botonera.addEventListener(Event.ENTER_FRAME, mPantallaBack);
function mPantallaBack(evt:Event):void {
botonera.x += 80;
texto.x += 80;
if (botonera.x == 80) {
new Menu(pan);
} else if (botonera.x >= 640) {
botonera.removeEventListener(Event.ENTER_FRAME, mPantallaBack);
pan.removeChild(texto);
pan.removeChild(botonera);
}
}
}
var loadG:Loader = new Loader();
loadG.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteGuardar);
loadG.load(new URLRequest("app:/Guardar.jpg"));
function oncompleteGuardar(event:Event):void {
var image:Bitmap = Bitmap(loadG.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 430;
image.y = 860;
image.width = 100;
image.height = 100;
G.addChild(image)
}
G.buttonMode = true;
G.addEventListener(MouseEvent.CLICK, onClickGuardar);
botonera.addChild(G);
var loadN:Loader = new Loader();
loadN.contentLoaderInfo.addEventListener(Event.COMPLETE, oncompleteNuevo);
loadN.load(new URLRequest("app:/Nuevo.png"));
function oncompleteNuevo(event:Event):void {
var image:Bitmap = Bitmap(loadN.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 540;
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
image.y = 860;
image.width = 100;
image.height = 100;
N.addChild(image);
}
N.buttonMode = true;
N.addEventListener(MouseEvent.CLICK, onClickNuevo);
botonera.addChild(N);
//Eliminar Alumno//
var loadE:Loader = new Loader();
loadE.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteE);
loadE.load(new URLRequest("app:/Eliminar.png"));
function onCompleteE(event:Event):void {
var image:Bitmap = Bitmap(loadE.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 320;
image.y = 860;
image.width = 100;
image.height = 100;
E.addChild(image);
}
E.buttonMode = true;
botonera.addChild(E);
//Eliminar Archivo//
//Botones navegacin por los registros//
var loadAdelante:Loader = new Loader();
loadAdelante.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteAdelante);
loadAdelante.load(new URLRequest("app:/RegistroAdelante.jpg"));
function onCompleteAdelante(event:Event):void {
var image:Bitmap = Bitmap(loadAdelante.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 210;
image.y = 860;
image.width = 100;
image.height = 100;
Adelante.addChild(image);
}
Adelante.buttonMode = true;
botonera.addChild(Adelante);
var loadAtras:Loader = new Loader();
loadAtras.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteAtras);
loadAtras.load(new URLRequest("app:/RegistroAtras.png"));
function onCompleteAtras(event:Event):void {
var image:Bitmap = Bitmap(loadAtras.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 110;
image.y = 860;
image.width = 100;
image.height = 100;
Atras.addChild(image);
}
Atras.buttonMode = true;
botonera.addChild(Atras);
//Botones navegacin por los registros//
//Volver al menu//
var loadBack:Loader = new Loader();
loadBack.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteBack);
loadBack.load(new URLRequest("app:/Back.png"));
function onCompleteBack(event:Event):void {
var image:Bitmap = Bitmap(loadBack.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 0;
image.y = 860;
image.width = 100;
image.height = 100;
back.addChild(image);
}
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
back.buttonMode = true;
back.addEventListener(MouseEvent.CLICK, onClickBack);
botonera.addChild(back);
//Volver al menu//
pan.addChild(botonera);
pan.addChild(texto);
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
function mBotones(evt:Event):void {
botonera.x -= 80;
texto.x -= 80;
if (botonera.x == 0) {
botonera.removeEventListener(Event.ENTER_FRAME, mBotones);
}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
{
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
flash.events.Event;
flash.events.MouseEvent;
flash.events.TimerEvent;
flash.filesystem.FileMode;
flash.filesystem.FileStream;
flash.geom.Point;
flash.net.SharedObject;
flash.net.URLLoaderDataFormat;
flash.net.URLRequestMethod;
flash.net.URLStream;
flash.net.XMLSocket;
flash.text.TextField;
flash.display.DisplayObject;
flash.display.Sprite;
flash.text.TextFieldAutoSize;
flash.text.TextFieldType;
flash.display.Graphics;
flash.events.KeyboardEvent;
flash.display.Loader;
flash.net.URLRequest;
flash.display.Bitmap;
flash.display.BitmapData;
flash.net.URLLoader;
flash.filesystem.File;
flash.text.TextFormat;
flash.text.TextFormatAlign;
flash.utils.Timer;
Menu;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
var
var
var
var
var
var
var
var
Reg3a:SharedObject
Reg3b:SharedObject
Reg3c:SharedObject
Reg3d:SharedObject
Reg4a:SharedObject
Reg4b:SharedObject
Reg4c:SharedObject
Reg4d:SharedObject
=
=
=
=
=
=
=
=
SharedObject.getLocal("registro3A");
SharedObject.getLocal("registro3B");
SharedObject.getLocal("registro3C");
SharedObject.getLocal("registro3D");
SharedObject.getLocal("registro4A");
SharedObject.getLocal("registro4B");
SharedObject.getLocal("registro4C");
SharedObject.getLocal("registro4D");
regxml =
<registrocompleto>
{XML(Reg1a.data.xml)}
{XML(Reg1b.data.xml)}
{XML(Reg1c.data.xml)}
{XML(Reg1d.data.xml)}
{XML(Reg2a.data.xml)}
{XML(Reg2b.data.xml)}
{XML(Reg2c.data.xml)}
{XML(Reg2d.data.xml)}
{XML(Reg3a.data.xml)}
{XML(Reg3b.data.xml)}
{XML(Reg3c.data.xml)}
{XML(Reg3d.data.xml)}
{XML(Reg4a.data.xml)}
{XML(Reg4b.data.xml)}
{XML(Reg4c.data.xml)}
{XML(Reg4d.data.xml)}
</registrocompleto>;
//Carga registros//
//Pantalla principal//
var formato:TextFormat = new TextFormat("arial", 30);
var formatoTitulo:TextFormat = new TextFormat("arial", 30);
formatoTitulo.align = TextFormatAlign.CENTER;
var titulo:TextField = new TextField();
titulo.x = 0;
titulo.y = 50;
titulo.text = "Introduzca su nombre de usuario y contrasea";
titulo.setTextFormat(formatoTitulo);
titulo.width = 640;
titulo.height = 40;
texto.addChild(titulo);
var Tus:TextField = new TextField();
Tus.x = 170;
Tus.y = 100;
Tus.width = 300;
Tus.height = 40;
Tus.text = "Usuario";
Tus.setTextFormat(formatoTitulo);
Tus.defaultTextFormat = formatoTitulo;
texto.addChild(Tus);
var Us:TextField = new TextField();
Us.border = true;
Us.type = TextFieldType.INPUT;
Us.width = 300;
Us.height = 40;
Us.x = 170;
Us.y = 140;
Us.setTextFormat(formato);
Us.defaultTextFormat = formato;
texto.addChild(Us);
var Tcon:TextField = new TextField();
Tcon.x = 170;
Tcon.y = 220;
Tcon.text = "Contrasea";
Tcon.width = 300;
Tcon.height = 40;
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
Tcon.setTextFormat(formatoTitulo);
Tcon.defaultTextFormat = formatoTitulo;
texto.addChild(Tcon);
var Con:TextField = new TextField();
Con.border = true;
Con.x = 170;
Con.y = 260;
Con.width = 300;
Con.height = 40;
Con.type = TextFieldType.INPUT;
Con.displayAsPassword = true;
Con.setTextFormat(formato);
Con.defaultTextFormat = formato;
texto.addChild(Con);
//Pantalla principal//
Con.addEventListener(KeyboardEvent.KEY_UP, onContra);
//Pantallazo//
pan.addChild(texto);
pan.addChild(botonera);
//Pantallazo//
//Funciones//
//Comprueba la contrasea//
function onContra(evt:KeyboardEvent):void{
if (Con.text == regxml.datosalumnos.alumno.(nombre == Us.text).contrasea)
{
aciertos = int(regxml.datosalumnos.alumno.(nombre == Us.text).puntos.
aciertos);
errores = int(regxml.datosalumnos.alumno.(nombre == Us.text).puntos.errores);
intentos = int(regxml.datosalumnos.alumno.(nombre == Us.text).puntos.
intentos);
texto.removeChild(Us);
texto.removeChild(Con);
texto.removeChild(titulo);
texto.removeChild(Tus),
texto.removeChild(Tcon);
correcto();
} else {
}
}
//Comprueba la contrasea//
//Despues de introducir usuario//
function correcto():void {
var Prob:SharedObject = SharedObject.getLocal((fecha.date).toString()+"/"+(
fecha.month+1).toString());
var problemas:XML = new XML(Prob.data.xml);
back.removeEventListener(MouseEvent.CLICK, onClickBackIni);
back.addEventListener(MouseEvent.CLICK, onClickBack);
botonera.addChild(back);
var
var
var
var
var
var
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
e.defaultTextFormat = formato;
texto.addChild(e);
c.x = 220;
c.y = 240;
c.autoSize = TextFieldAutoSize.LEFT;
c.setTextFormat(formato);
c.defaultTextFormat = formato;
texto.addChild(c);
s.type = TextFieldType.INPUT;
s.border = true;
s.width = 200;
s.height=50
s.x = 220;
s.y = 290;
s.setTextFormat(formato);
s.defaultTextFormat = formato;
texto.addChild(s);
n.width =20;
n.height = 40;
n.x = 600;
n.y = 180;
n.text = id.toString();
texto.addChild(n);
n.setTextFormat(formato);
n.defaultTextFormat = formato;
finish.x = 20;
finish.y = 200;
finish.width = 600;
finish.height = 200;
finish.setTextFormat(formatoTitulo);
finish.defaultTextFormat = formatoTitulo;
var dato:String=problemas.problema.(@id == id).enunciado;
e.text = dato;
for (var pname:String in problemas.problema) {
i = problemas.problema.@id[pname];
}
var loadGo:Loader = new Loader();
loadGo.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteGo);
loadGo.load(new URLRequest("app:/Go.jpg"));
function onCompleteGo(event:Event):void {
var image:Bitmap = Bitmap(loadGo.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 220;
image.y = 370;
image.width = 200;
image.height = 200;
go.addChild(image);
}
go.buttonMode = true;
go.addEventListener(MouseEvent.CLICK, onClickGo);
botonera.addChild(go);
var tim:Timer = new Timer(500, 1);
tim.addEventListener(TimerEvent.TIMER, onTimer);
function onClickGo(evt:Event):void {
var str:String = problemas.problema.(@id == id).solucion;
if (str == s.text && e.length > 0) {
aciertos = aciertos + int(problemas.problema.(@id == id).dificultad);
intentos++;
c.text = "CORRECTO!";
tim.start();
} else {
errores++;
intentos++;
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
c.text = "NOOOO!";
}
}
function onTimer(evt:TimerEvent):void {
id++;
if (id<=i){
texto.removeChild(e);
texto.removeChild(s);
texto.removeChild(n);
texto.removeChild(c);
e = new TextField();
e.border = true;
e.width = 600;
e.height = 200;
e.x = 20;
e.y = 20;
e.multiline = true;
e.wordWrap = true;
e.setTextFormat(formato);
e.defaultTextFormat = formato;
texto.addChild(e);
c = new TextField();
c.x = 220;
c.y = 240;
c.autoSize = TextFieldAutoSize.LEFT;
c.setTextFormat(formato);
c.defaultTextFormat = formato;
texto.addChild(c);
s = new TextField();
s.type = TextFieldType.INPUT;
s.border = true;
s.width = 200;
s.height = 50;
s.x = 220;
s.y = 290;
s.setTextFormat(formato);
s.defaultTextFormat = formato;
texto.addChild(s);
n = new TextField();
n.width =20;
n.height = 40;
n.x = 600;
n.y = 180;
n.text = id.toString();
n.setTextFormat(formato);
n.defaultTextFormat = formato;
texto.addChild(n);
var dato:String=problemas.problema.(@id == id).enunciado;
e.text = dato;
} else {
texto.removeChild(e);
texto.removeChild(n);
texto.removeChild(c);
texto.removeChild(s);
botonera.removeChild(go);
finish.text = "Buen trabajo!";
texto.addChild(finish);
}
}
}
//Despues de introducir usuario//
//Volver al menu desde la contrasea//
function onClickBackIni(evt:MouseEvent):void {
texto.addEventListener(Event.ENTER_FRAME, mPantallaBack);
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
function mPantallaBack(evt:Event):void {
texto.x += 80;
botonera.x += 80;
if (texto.x == 80) {
new Menu(pan);
} else if (texto.x >= 640) {
texto.removeEventListener(Event.ENTER_FRAME, mPantallaBack);
pan.removeChild(botonera);
pan.removeChild(texto);
}
}
}
//Volver al menu desde la contrasea//
//Volver al menu desde los ejercicios//
function onClickBack(evt:MouseEvent):void {
curso = regxml.datosalumnos.alumno.(nombre == Us.text).parent().curso;
clase = regxml.datosalumnos.alumno.(nombre == Us.text).parent().clase;
var guardar:SharedObject = SharedObject.getLocal("registro" + curso + clase);
var newreg:XML = XML(guardar.data.xml);
newreg.alumno.(nombre == Us.text).puntos.aciertos = aciertos.toString();
newreg.alumno.(nombre == Us.text).puntos.errores = errores.toString();
newreg.alumno.(nombre == Us.text).puntos.intentos = intentos.toString();
guardar.data.xml = newreg;
guardar.flush(3000);
texto.addEventListener(Event.ENTER_FRAME, mPantallaBack);
function mPantallaBack(evt:Event):void {
texto.x += 80;
botonera.x += 80;
if (texto.x == 80) {
new Menu(pan);
} else if (texto.x >= 640) {
texto.removeEventListener(Event.ENTER_FRAME, mPantallaBack);
pan.removeChild(botonera);
pan.removeChild(texto);
}
}
}
//Volver al menu desde los ejercicios//
//Funciones//
//Carga de imagenes//
var loadBack:Loader = new Loader();
loadBack.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteBack);
loadBack.load(new URLRequest("app:/Back.png"));
function onCompleteBack(event:Event):void {
var image:Bitmap = Bitmap(loadBack.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 0;
image.y = 860;
image.width = 100;
image.height = 100;
back.addChild(image);
}
back.buttonMode = true;
back.addEventListener(MouseEvent.CLICK, onClickBackIni);
botonera.addChild(back);
//Carga de imagenes//
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
{
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
flash.automation.StageCaptureEvent;
flash.display.Bitmap;
flash.display.BitmapData;
flash.display.Loader;
flash.display.Sprite;
flash.events.Event;
flash.events.KeyboardEvent;
flash.events.MouseEvent;
flash.events.TimerEvent;
flash.net.SharedObject;
flash.net.URLRequest;
flash.text.TextField;
flash.text.TextFieldType;
flash.text.TextFormat;
flash.text.TextFormatAlign;
flash.utils.Timer;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
existentes = XML(archivos.data.existentes);
} else {
existentes =
<datos>
</datos>;
}
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
}
}
function actualizarn():void {
n = Math.floor((i-1) / 15);
}
function onClickRegistro(evt:MouseEvent):void {
if (i >0 && display<=dis-1) {
TextField(lista.getChildAt(display)).background = false;
}
display = int(evt.target.name);
index = display + 15 * j;
TextField(lista.getChildAt(display)).background = true;
TextField(lista.getChildAt(display)).backgroundColor = 0x99ccff;
crear.removeEventListener(MouseEvent.CLICK, onClickCrear);
crear.addEventListener(MouseEvent.CLICK, onClickSeleccionar);
E.addEventListener(MouseEvent.CLICK, onClickE);
}
function onClickCrear(evt:MouseEvent):void {
var xml:XML =
<item>{nuevo.text}</item>;
existentes.appendChild(xml);
archivos.data.existentes = existentes;
archivos.flush(3000);
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
function mBotones(evt:Event):void {
botonera.x -= 80;
texto.x -= 80;
if (botonera.x == -80) {
pan.removeChild(texto);
pan.removeChild(botonera);
new CrearDeberes(pan, capa, nuevo.text);
} else if (botonera.x == -640) {
botonera.removeEventListener(Event.ENTER_FRAME, mBotones);
}
}
}
function onClickSeleccionar(evt:MouseEvent):void {
archivos.data.existentes = existentes;
archivos.flush(3000);
botonera.addEventListener(Event.ENTER_FRAME, mBotones);
function mBotones(evt:Event):void {
botonera.x -= 80;
texto.x -= 80;
if (botonera.x == -80) {
new CrearDeberes(pan, capa, TextField(lista.getChildAt(display)).text);
trace(TextField(lista.getChildAt(display)).text);
} else if (botonera.x == -640) {
botonera.removeEventListener(Event.ENTER_FRAME, mBotones);
}
}
}
function onClickE(evt:MouseEvent):void {
delete existentes.item[display];
actualizarpantalla();
}
function onClickBack(evt:MouseEvent):void {
texto.addEventListener(Event.ENTER_FRAME, mPantallaBack);
archivos.data.existentes = existentes;
archivos.flush(3000);
function mPantallaBack(evt:Event):void {
texto.x += 80;
botonera.x += 80;
if (texto.x == 80) {
new Menu(pan);
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
{
import
import
import
import
import
import
import
import
import
import
import
import
import
flash.display.Bitmap;
flash.display.BitmapData;
flash.display.Loader;
flash.display.Sprite;
flash.events.Event;
flash.events.MouseEvent;
flash.net.SharedObject;
flash.net.URLRequest;
flash.text.TextField;
flash.text.TextFieldAutoSize;
flash.text.TextFieldType;
flash.text.TextFormat;
flash.text.TextFormatAlign;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
}
//Inicializar con registro existente//
var Prob:SharedObject = SharedObject.getLocal("problemas");
problemas = XML(Prob.data.xml);
var Deb:SharedObject = SharedObject.getLocal(archivo);
if (Deb.size>0){
deberes = XML(Deb.data.xml);
}else {
deberes =
<datos>
</datos>;
}
//Inicializar con registro existente//
//Variables de texto//
var formato:TextFormat = new TextFormat("arial", 20);
var formato1:TextFormat = new TextFormat("arial", 20);
formato1.align = TextFormatAlign.CENTER;
var formatoTitulo:TextFormat = new TextFormat("arial", 25, null, null, null, true);
formatoTitulo.align = TextFormatAlign.CENTER;
var titulo:TextField = new TextField();
titulo.x = 0;
titulo.y = 10;
titulo.width = 640;
titulo.height = 40;
titulo.text = "SELECCIONE LOS EJERCICIOS";
titulo.setTextFormat(formatoTitulo);
texto.addChild(titulo);
var Tenunciado:TextField = new TextField();
Tenunciado.x = 20;
Tenunciado.y = 50;
Tenunciado.text = "Ejercicio "+iGuardar+":";
Tenunciado.autoSize = TextFieldAutoSize.LEFT;
Tenunciado.setTextFormat(formato);
Tenunciado.defaultTextFormat = formato;
texto.addChild(Tenunciado);
var enunciado:TextField = new TextField();
enunciado.x = 20;
enunciado.y = 80;
enunciado.width = 500;
enunciado.height = 200;
enunciado.wordWrap = true;
enunciado.defaultTextFormat = formato;
texto.addChild(enunciado);
var Tsolucion:TextField = new TextField();
Tsolucion.x = 525;
Tsolucion.y = 80;
Tsolucion.text = "Solucin:";
Tsolucion.autoSize = TextFieldAutoSize.LEFT;
Tsolucion.setTextFormat(formato);
texto.addChild(Tsolucion);
var solucion:TextField = new TextField();
solucion.x = 525;
solucion.y = 110;
solucion.width = 100;
solucion.height = 30;
solucion.setTextFormat(formato);
solucion.defaultTextFormat = formato;
texto.addChild(solucion);
var Ttema:TextField = new TextField();
Ttema.x = 525;
Ttema.y = 140;
Ttema.text = "Tema:";
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
Ttema.autoSize = TextFieldAutoSize.LEFT;
Ttema.setTextFormat(formato);
texto.addChild(Ttema);
var tema:TextField = new TextField();
tema.x = 525;
tema.y = 170;
tema.border;
tema.width = 100;
tema.height = 30;
tema.setTextFormat(formato);
tema.defaultTextFormat = formato;
texto.addChild(tema);
var Tdificultad:TextField = new TextField();
Tdificultad.x = 525;
Tdificultad.y = 200;
Tdificultad.text = "Dificultad:"
Tdificultad.autoSize = TextFieldAutoSize.LEFT;
Tdificultad.setTextFormat(formato);
texto.addChild(Tdificultad);
var dificultad:TextField = new TextField();
dificultad.x = 525;
dificultad.y = 230;
dificultad.width = 30;
dificultad.height = 30;
dificultad.restrict = "1-3";
dificultad.setTextFormat(formato);
dificultad.defaultTextFormat = formato;
texto.addChild(dificultad);
var ejercicios1:TextField = new TextField();
ejercicios1.x = 10;
ejercicios1.y = 285;
ejercicios1.width = 300;
ejercicios1.height = 30;
ejercicios1.text = "PROBLEMAS INTRODUCIDOS";
ejercicios1.setTextFormat(formato1);
ejercicios1.defaultTextFormat = formato1;
texto.addChild(ejercicios1);
var ejercicios2:TextField = new TextField();
ejercicios2.x = 330;
ejercicios2.y = 285;
ejercicios2.width = 300;
ejercicios2.height = 30;
ejercicios2.text = "PROBLEMAS SELECCIONADOS";
ejercicios2.setTextFormat(formato1);
ejercicios2.defaultTextFormat = formato1;
texto.addChild(ejercicios2);
//Variables de texto//
lista1.addEventListener(MouseEvent.CLICK, onClickRegistro1);
lista2.addEventListener(MouseEvent.CLICK, onClickRegistro1);
lista3.addEventListener(MouseEvent.CLICK, onClickRegistro1);
lista4.addEventListener(MouseEvent.CLICK, onClickRegistro1);
lista5.addEventListener(MouseEvent.CLICK, onClickRegistro1);
lista6.addEventListener(MouseEvent.CLICK, onClickRegistro2);
lista7.addEventListener(MouseEvent.CLICK, onClickRegistro2);
lista8.addEventListener(MouseEvent.CLICK, onClickRegistro2);
lista9.addEventListener(MouseEvent.CLICK, onClickRegistro2);
lista10.addEventListener(MouseEvent.CLICK, onClickRegistro2);
botonera.graphics.lineStyle(2);
botonera.graphics.drawRect(10, 315, 300, 415);
botonera.graphics.drawRect(330, 315, 300, 415);
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
botonera.addChild(lista1);
botonera.addChild(lista2);
botonera.addChild(lista3);
botonera.addChild(lista4);
botonera.addChild(lista5);
botonera.addChild(lista6);
botonera.addChild(lista7);
botonera.addChild(lista8);
botonera.addChild(lista9);
botonera.addChild(lista10);
actualizarpantalla1();
actualizarpantalla2();
function onClickRegistro1(evt:MouseEvent):void {
if (i1 >0 && display1<=dis1-1) {
TextField(lista1.getChildAt(display1)).background = false;
TextField(lista2.getChildAt(display1)).background = false;
TextField(lista3.getChildAt(display1)).background = false;
TextField(lista4.getChildAt(display1)).background = false;
TextField(lista5.getChildAt(display1)).background = false;
}
if (i2 > 0 && display2<=dis2-1){
TextField(lista6.getChildAt(display2)).background = false;
TextField(lista7.getChildAt(display2)).background = false;
TextField(lista8.getChildAt(display2)).background = false;
TextField(lista9.getChildAt(display2)).background = false;
TextField(lista10.getChildAt(display2)).background = false;
}
display1 = int(evt.target.name);
index1 = display1 + 4 * j1;
var str:String = TextField(lista1.getChildAt(display1)).text;
var str1:String = TextField(lista2.getChildAt(display1)).text;
var str2:String = TextField(lista3.getChildAt(display1)).text;
var str3:String = TextField(lista4.getChildAt(display1)).text;
var str4:String = TextField(lista5.getChildAt(display1)).text;
Tenunciado.text = "Ejercicio "+str+":";
enunciado.text = str1;
solucion.text = str2;
dificultad.text = str3;
tema.text = str4;
Add.addEventListener(MouseEvent.CLICK, onClickAadir);
TextField(lista1.getChildAt(display1)).background = true;
TextField(lista1.getChildAt(display1)).backgroundColor = 0x99ccff;
TextField(lista2.getChildAt(display1)).background = true;
TextField(lista2.getChildAt(display1)).backgroundColor = 0x99ccff;
TextField(lista3.getChildAt(display1)).background = true;
TextField(lista3.getChildAt(display1)).backgroundColor = 0x99ccff;
TextField(lista4.getChildAt(display1)).background = true;
TextField(lista4.getChildAt(display1)).backgroundColor = 0x99ccff;
TextField(lista5.getChildAt(display1)).background = true;
TextField(lista5.getChildAt(display1)).backgroundColor = 0x99ccff;
}
function onClickRegistro2(evt:MouseEvent):void {
if (i1 > 0 && display1<=dis1-1) {
TextField(lista1.getChildAt(display1)).background = false;
TextField(lista2.getChildAt(display1)).background = false;
TextField(lista3.getChildAt(display1)).background = false;
TextField(lista4.getChildAt(display1)).background = false;
TextField(lista5.getChildAt(display1)).background = false;
}
if(i2>0 && display2<=dis2-1){
TextField(lista6.getChildAt(display2)).background = false;
TextField(lista7.getChildAt(display2)).background = false;
TextField(lista8.getChildAt(display2)).background = false;
TextField(lista9.getChildAt(display2)).background = false;
TextField(lista10.getChildAt(display2)).background = false;
}
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
display2 = int(evt.target.name);
index2 = display2 + 4 * j2;
var str:String = TextField(lista6.getChildAt(display2)).text;
var str1:String = TextField(lista7.getChildAt(display2)).text;
var str2:String = TextField(lista8.getChildAt(display2)).text;
var str3:String = TextField(lista9.getChildAt(display2)).text;
var str4:String = TextField(lista10.getChildAt(display2)).text;
Tenunciado.text = "Ejercicio "+str+":";
enunciado.text = str1;
solucion.text = str2;
dificultad.text = str3;
tema.text = str4;
E.addEventListener(MouseEvent.CLICK, onClickE);
TextField(lista6.getChildAt(display2)).background = true;
TextField(lista6.getChildAt(display2)).backgroundColor = 0x99ccff;
TextField(lista7.getChildAt(display2)).background = true;
TextField(lista7.getChildAt(display2)).backgroundColor = 0x99ccff;
TextField(lista8.getChildAt(display2)).background = true;
TextField(lista8.getChildAt(display2)).backgroundColor = 0x99ccff;
TextField(lista9.getChildAt(display2)).background = true;
TextField(lista9.getChildAt(display2)).backgroundColor = 0x99ccff;
TextField(lista10.getChildAt(display2)).background = true;
TextField(lista10.getChildAt(display2)).backgroundColor = 0x99ccff;
}
function actualizarpantalla1():void {
var offsety:int = 0;
var iactual:int = 4 * j1;
if (i1>1){
lista1.removeChildren(0, dis1 - 1);
lista2.removeChildren(0, dis1 - 1);
lista3.removeChildren(0, dis1 - 1);
lista4.removeChildren(0, dis1 - 1);
lista5.removeChildren(0, dis1 - 1);
}
i1 = 0;
dis1 = 0;
for (var pname:String in problemas.problema)
{
if(iactual<=i1 && i1<iactual+4){
enun = new TextField();
idm = new TextField();
sol = new TextField();
dif = new TextField();
tem = new TextField();
idm.name = dis1.toString();
enun.name = dis1.toString();
sol.name = dis1.toString();
dif.name = dis1.toString();
tem.name = dis1.toString();
idm.x = 20;
idm.y = 320 + offsety;
idm.width = 32;
idm.height = 100;
idm.setTextFormat(formato);
idm.defaultTextFormat = formato;
idm.text = problemas.problema.@id[pname];
enun.x = 50;
enun.y = 320 + offsety;
enun.width = 170;
enun.height = 100;
enun.setTextFormat(formato);
enun.defaultTextFormat = formato;
enun.wordWrap = true;
enun.text = problemas.problema.enunciado[pname];
sol.x = 220;
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
enun.name = dis2.toString();
sol.name = dis2.toString();
dif.name = dis2.toString();
tem.name = dis2.toString();
idm.x = 340;
idm.y = 320 + offsety;
idm.width = 32;
idm.height = 100;
idm.setTextFormat(formato);
idm.defaultTextFormat = formato;
idm.text = deberes.problema.@id[pname];
enun.x = 370;
enun.y = 320 + offsety;
enun.width = 170;
enun.height = 100;
enun.setTextFormat(formato);
enun.defaultTextFormat = formato;
enun.wordWrap = true;
enun.text = deberes.problema.enunciado[pname];
sol.x = 540;
sol.y = 320 + offsety;
sol.width = 80;
sol.height = 32;
sol.setTextFormat(formato);
sol.defaultTextFormat = formato;
sol.text = deberes.problema.solucion[pname];
tem.x = 540;
tem.y = 350 + offsety;
tem.width = 80;
tem.height = 32;
tem.setTextFormat(formato);
tem.defaultTextFormat = formato;
tem.text = deberes.problema.tema[pname];
dif.x = 540;
dif.y = 380 + offsety;
dif.width = 80;
dif.height = 40;
dif.setTextFormat(formato);
dif.defaultTextFormat = formato;
dif.text = deberes.problema.dificultad[pname];
lista6.addChild(idm);
lista7.addChild(enun);
lista8.addChild(sol);
lista9.addChild(dif);
lista10.addChild(tem);
offsety = offsety + 100;
dis2++;
}
i2++;
}
actualizarn2();
if (n2>j2 && !Adelante1.hasEventListener(MouseEvent.CLICK) ) {
Adelante1.addEventListener(MouseEvent.CLICK, onClickAdelante1);
}else if(n2==j2 && Adelante1.hasEventListener(MouseEvent.CLICK)){
Adelante1.removeEventListener(MouseEvent.CLICK, onClickAdelante1);
}
if (j2 > 0 && !Atras1.hasEventListener(MouseEvent.CLICK)) {
Atras1.addEventListener(MouseEvent.CLICK, onClickAtras1);
}else if (j2 == 0 && Atras1.hasEventListener(MouseEvent.CLICK)) {
Atras1.removeEventListener(MouseEvent.CLICK, onClickAtras1);
}
}
function actualizarn2():void {
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
n2 = Math.floor((i2-1) / 4);
}
function onClickAdelante(evt:MouseEvent):void {
j1++;
actualizarpantalla1();
}
function onClickAdelante1(evt:MouseEvent):void {
j2++;
actualizarpantalla2();
}
function onClickAtras(evt:MouseEvent):void {
j1--;
actualizarpantalla1();
}
function onClickAtras1(evt:MouseEvent):void {
j2--;
actualizarpantalla2();
}
function onClickAadir(evt:MouseEvent):void {
//Selecciona la id del problema a introducir//
var iGuardar:int = 0;
for (var pname:String in deberes.problema)
{
if (deberes.problema.@id[pname] < iGuardar)
{
} else {
iGuardar = deberes.problema.@id[pname];
}
}
//Selecciona la id del problema a introducir//
iGuardar++;
var xml:XML =
<problema id={iGuardar}>
<dificultad>{dificultad.text}</dificultad>
<tema>{tema.text}</tema>
<enunciado>{enunciado.text}</enunciado>
<solucion>{solucion.text}</solucion>
</problema>;
deberes.appendChild(xml);
actualizarpantalla2();
}
function onClickE(evt:MouseEvent):void {
delete deberes.problema[index2];
var count:int = 1;
for (var pname:String in deberes.problema){
deberes.problema.@id[pname] = count.toString();
count++;
}
texto.removeChild(Tenunciado);
texto.removeChild(dificultad);
texto.removeChild(solucion);
texto.removeChild(enunciado);
texto.removeChild(tema);
Tenunciado = new TextField();
Tenunciado.x = 20;
Tenunciado.y = 50;
Tenunciado.text = "Ejercicio :";
Tenunciado.autoSize = TextFieldAutoSize.LEFT;
Tenunciado.setTextFormat(formato);
Tenunciado.defaultTextFormat = formato;
texto.addChild(Tenunciado);
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
loadAdelante.load(new URLRequest("app:/RegistroAdelante.jpg"));
function onCompleteAdelante(event:Event):void {
var image:Bitmap = Bitmap(loadAdelante.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 190;
image.y = 740;
image.width = 70;
image.height = 70;
Adelante.addChild(image);
var bitmap2:BitmapData = bitmap.clone();
var image2:Bitmap = new Bitmap(bitmap2);
image2.x = 510;
image2.y = 740;
image2.width = 70;
image2.height = 70;
Adelante1.addChild(image2);
}
Adelante.buttonMode = true;
Adelante1.buttonMode = true;
botonera.addChild(Adelante);
botonera.addChild(Adelante1);
var loadAtras:Loader = new Loader();
loadAtras.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteAtras);
loadAtras.load(new URLRequest("app:/RegistroAtras.png"));
function onCompleteAtras(event:Event):void {
var image:Bitmap = Bitmap(loadAtras.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 60;
image.y = 740;
image.width = 70;
image.height = 70;
Atras.addChild(image);
var bitmap2:BitmapData = bitmap.clone();
var image2:Bitmap = new Bitmap(bitmap2);
image2.x = 380;
image2.y = 740;
image2.width = 70;
image2.height = 70;
Atras1.addChild(image2);
}
Atras.buttonMode = true;
Atras1.buttonMode = true;
botonera.addChild(Atras);
botonera.addChild(Atras1);
//Botones navegacin por los registros//
//Boton aadir ejercicio//
var loadAdd:Loader = new Loader();
loadAdd.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteAdd);
loadAdd.load(new URLRequest("app:/Aadir.jpg"));
function onCompleteAdd(event:Event):void {
var image:Bitmap = Bitmap(loadAdd.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 295;
image.y = 820;
image.width = 50;
image.height = 50;
Add.addChild(image);
}
Add.buttonMode = true;
botonera.addChild(Add);
//Boton aadir ejercicio//
//Eliminar Alumno//
var loadE:Loader = new Loader();
loadE.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteE);
loadE.load(new URLRequest("app:/Eliminar.png"));
function onCompleteE(event:Event):void {
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.SharedObject;
import flash.net.URLRequest;
/**
* ...
* @author Murcis
*/
public class Carrera extends Sprite
{
var registro:XML;
var metros:int;
var offset:int = 0;
var coches:Sprite = new Sprite();
var back:Sprite = new Sprite();
var botonera:Sprite = new Sprite();
var image:Bitmap;
var bitmap:BitmapData;
public function Carrera(pan:Sprite)
{
var Reg:SharedObject = SharedObject.getLocal("registro1A");
registro = XML(Reg.data.xml);
var loadCoches:Loader = new Loader();
loadCoches.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteCoches);
loadCoches.load(new URLRequest("app:/Moto1.jpg"));
function onCompleteCoches(event:Event):void {
image = Bitmap(loadCoches.content);
bitmap = image.bitmapData;
for (var pname:String in registro.alumno) {
metros = registro.alumno.puntos.aciertos[pname]*20-registro.alumno.puntos.
errores[pname]*5;
bitmap = bitmap.clone();
image = new Bitmap(bitmap);
image.x = 20 + metros;
image.y = 50+offset;
image.width = 50;
image.height = 50;
coches.addChild(image);
offset += 50;
}
}
function onClickBack(evt:Event):void {
coches.addEventListener(Event.ENTER_FRAME, mPantallaBack);
function mPantallaBack(evt:Event):void {
coches.x += 80;
botonera.x += 80;
if (coches.x == 80) {
new Menu(pan);
} else if (coches.x >= 640) {
coches.removeEventListener(Event.ENTER_FRAME, mPantallaBack);
pan.removeChild(botonera);
pan.removeChild(coches);
}
}
}
//pantallazos//
pan.addChild(coches);
pan.addChild(botonera);
//pantallazos//
//Cargar imagenes//
//Volver al menu//
var loadBack:Loader = new Loader();
loadBack.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteBack);
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
loadBack.load(new URLRequest("app:/Back.png"));
function onCompleteBack(event:Event):void {
var image:Bitmap = Bitmap(loadBack.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 0;
image.y = 860;
image.width = 100;
image.height = 100;
back.addChild(image);
}
back.buttonMode = true;
back.addEventListener(MouseEvent.CLICK, onClickBack);
botonera.addChild(back);
//Volver al Menu//
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
{
import
import
import
import
import
import
import
import
import
import
import
flash.display.Bitmap;
flash.display.BitmapData;
flash.display.Loader;
flash.display.Sprite;
flash.display3D.textures.Texture;
flash.events.Event;
flash.events.MouseEvent;
flash.net.SharedObject;
flash.net.URLRequest;
flash.text.TextField;
flash.text.TextFormat;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
nombre.y = offsety;
aciertos.y = offsety;
errores.y = offsety;
efectividad.y = offsety;
nombre.text = alumnos.alumno.nombre[pname];
aciertos.text = alumnos.alumno.puntos.aciertos[pname];
errores.text = alumnos.alumno.puntos.errores[pname];
efectividad.text = (int(aciertos.text) / int(alumnos.alumno.puntos.intentos[
pname])).toString();
texto.addChild(nombre);
texto.addChild(aciertos);
texto.addChild(errores);
texto.addChild(efectividad);
offsety += 50;
}
//pantallazos//
pan.addChild(texto);
pan.addChild(botonera);
//pantallazos//
//Volver al menu//
var loadBack:Loader = new Loader();
loadBack.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteBack);
loadBack.load(new URLRequest("app:/Back.png"));
function onCompleteBack(event:Event):void {
var image:Bitmap = Bitmap(loadBack.content);
var bitmap:BitmapData = image.bitmapData;
image.x = 0;
image.y = 860;
image.width = 100;
image.height = 100;
back.addChild(image);
}
back.buttonMode = true;
back.addEventListener(MouseEvent.CLICK, onClickBack);
botonera.addChild(back);
function onClickBack(evt:MouseEvent):void {
botonera.addEventListener(Event.ENTER_FRAME, mPantallaBack);
function mPantallaBack(evt:Event):void {
botonera.x += 80;
texto.x += 80;
if (botonera.x == 80) {
new Menu(pan);
} else if (botonera.x >= 640) {
botonera.removeEventListener(Event.ENTER_FRAME, mPantallaBack);
pan.removeChild(texto);
pan.removeChild(botonera);
}
}
}
//Volver al menu//
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72