Instituto Tecnológico Superior
Cordillera
DESARROLLO DE VIDEOJUEGOS
16 HORAS
Carrera/s
Análisis de Sistemas
1. Datos informati vos: Nivel
2
Autor:
Tecnológico Vida Nuevahttp://www.cordillera.edu.ec/
[email protected]
Ing. Roberto Morales
2. Índice 1. Datos informativos: ........................................................................................ 1 2. Índice ............................................................................................................. 2 3. Introducción ................................................................................................... 5 4. Prerrequisitos ................................................................................................ 5 5. Evaluación inicial ........................................................................................... 5 6. Orientaciones generales para el estudio ....................................................... 6 7. Desarrollo de contenidos ............................................................................... 7 I. Unidad: Desarrollo de Videojuegos ................................................................ 7 Objetivos ............................................................................................................ 7 Contenidos ......................................................................................................... 7 1.1. Introducción a los videojuegos ......................................................... 7 1.2. Historia de los videojuegos .............................................................. 7 1970-1979: La eclosión de los videojuegos .......................... ............ .......................... ............... ... 8 1980-1989: La década de los 8 bits ........................... .............. .......................... .......................... ............. 9 1990-1999: La revolución de las 3D .................................................. 12 Desde el 2000: El comienzo del nuevo siglo ..................................... 13 DEFINICIÓN Y ACTUALIDAD ........................................................... 14 1.3. Revisión del IDE de desarrollo .......................... ............. .......................... ........................... ................ .. 14 IDE de Programación: ........................................................................ 14 Características ................................................................................... 14 Componentes .................................................................................... 15 Ejemplos de IDE’s.............................................................................. 15
1.4. Métodos KEYPRESSED......................... ............ .......................... ........................... .......................... .............. 16 getKeyChar (): ................................................................................... 16 KeyAdapter ........................................................................................ 16 KeyPressed (): ................................................................................... 16 Ejemplo: ............................................................................................. 16
Ing. Roberto Morales
2. Índice 1. Datos informativos: ........................................................................................ 1 2. Índice ............................................................................................................. 2 3. Introducción ................................................................................................... 5 4. Prerrequisitos ................................................................................................ 5 5. Evaluación inicial ........................................................................................... 5 6. Orientaciones generales para el estudio ....................................................... 6 7. Desarrollo de contenidos ............................................................................... 7 I. Unidad: Desarrollo de Videojuegos ................................................................ 7 Objetivos ............................................................................................................ 7 Contenidos ......................................................................................................... 7 1.1. Introducción a los videojuegos ......................................................... 7 1.2. Historia de los videojuegos .............................................................. 7 1970-1979: La eclosión de los videojuegos .......................... ............ .......................... ............... ... 8 1980-1989: La década de los 8 bits ........................... .............. .......................... .......................... ............. 9 1990-1999: La revolución de las 3D .................................................. 12 Desde el 2000: El comienzo del nuevo siglo ..................................... 13 DEFINICIÓN Y ACTUALIDAD ........................................................... 14 1.3. Revisión del IDE de desarrollo .......................... ............. .......................... ........................... ................ .. 14 IDE de Programación: ........................................................................ 14 Características ................................................................................... 14 Componentes .................................................................................... 15 Ejemplos de IDE’s.............................................................................. 15
1.4. Métodos KEYPRESSED......................... ............ .......................... ........................... .......................... .............. 16 getKeyChar (): ................................................................................... 16 KeyAdapter ........................................................................................ 16 KeyPressed (): ................................................................................... 16 Ejemplo: ............................................................................................. 16
1.5. Funciones de sonido ...................................................................... 19 Introducción ....................................................................................... 19 Clases principales .............................................................................. 20 Formatos de audio .......................................................................... 20 Arquitectura de los sistemas ......................... ............ .......................... .......................... .................. ..... 21 Mixers ............................................................................................. 21 Lines ............................................................................................... 22 Clases DataLine ............................................................................. 23 Acceso a los componentes componentes del sistema ......................... ............ .......................... .................... ....... 24 Obtención de los recursos........................... .............. .......................... .......................... ...................... ......... 26 Reproducción de sonido .................................................................... 26 Reproducción del sonido mediante SourceDataLine.................... .. 27 Sincronización de líneas ................................................................ 28 Captura de sonido .......................................................................... 28 Procesado de la señal .................................................................... 29 1.6. Manejo de estructuras ................................................................... 30 Antecedentes .......................... ............ ........................... .......................... .......................... .......................... .................... ....... 30 Tipos de estructura de control ........................................................... 31 Antecedentes .......................... ............. .......................... .......................... .......................... ........................... ................ .. 31 Ejecución secuencial ...................................................................... 31 Transferencia de control......................... ............ .......................... ........................... .......................... .............. 31 De selección ................................................................................... 31 Estructura de control ...................................................................... 31 Selección if simple ...................................................................... 31 Select-Case ................................................................................ 32 Estructuras de control iterativas ..................................................... 33 Do-While ..................................................................................... 33 Do-Until ....................................................................................... 33 For-Next ...................................................................................... 34 Estructuras anidadas .................................................................. 34 Estructura For-Next dentro de una estructura If-Then-Else .................. ........... 34 Estructura If-Then-Else dentro de estructura For-Next .................................... 34 Estructura For-Next que está dentro de estructura Do-While ............... ........... 35 1.7. Generación de interfaz gráfica ....................................................... 35
Estrategias de enseñanza enseñanza – aprendizaje ......................................................... 36 Recursos .......................................................................................................... 37 8. Evaluación final............................................................................................ 37 Evaluación Teórica ........................................................................................... 37 Evaluación Práctica .......................................................................................... 43 9. Bibliografía ................................................................................................... 43 10. Anexos........................... ............. .......................... ......................... .......................... ........................... ........................... ........................ ........... 43 Anexo 1 (Ejercicio if-.else) ................................. .................... .......................... .......................... .......................... .................... ....... 43 Lectura Reflexiva ............................................................................................. 44 EL TREN DE LA VIDA ........................................................................... 44 11. Glosario ..................................................................................................... 45 General ............................................................................................................ 45
Unidad: Desarrollo de Videojuegos Introducción
3. Introducción La capacidad evolutiva del hombre ha hecho que cada vez vaya desarrollando una herramienta que le permita distraer su mente en algo nuevo y diferente, algo que lo saque de la rutina del diario vivir, determinando y a su vez creando, una forma de convivencia social ha sido el desglose de nuevos programas que permiten encontrar en los juegos distracción total o parcial de su vida cotidiana.
4. Prerrequisitos Tener conocimientos de Programación Lineal y Programación Orientada a Objetos.
5. Evaluación inicial
Nombre: ________________________________ Escuela: Análisis de Sistemas Docente: ________________________________
Nivel: SEGUNDO Jornada: ____________________ Fecha: _________________ Calificación:___________
Recomendaciones: Lea detenidamente cada una de las preguntas antes de
contestarlas, se recomienda también iniciar por las preguntas de menos complejidad. 1. ¿Qué Conoce de los videojuegos?
__________________________________________________________ __________________________________________________________ __________________________________________________________ 2. ¿Qué es una Estructura de Control?
__________________________________________________________ __________________________________________________________ __________________________________________________________
3. De un criterio personal de la evolución de los videojuegos
__________________________________________________________ Tecnológico Superior Cordillera
Página 5
Unidad: Desarrollo de Videojuegos __________________________________________________________ __________________________________________________________ __________________________________________________________ Orientaciones generales para el estudio
__________________________________________________________ __________________________________________________________ 4. ¿Qué programas conoce Ud. que permita desarrollar videojuegos?
__________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________
6. Orientaciones generales para el estudio Procure combinar el estudio teórico con la práctica tanto como sea posible, poniendo inmediatamente en práctica los temas tratados; es recomendable por tanto estudiar con el módulo de instrucción y una computadora simultáneamente. Si por alguna razón no comprende un tema, o le es difícil conseguir los resultados planteados; inténtelo nuevamente y/o pregunte al docente cómo resolver el problema; esto asegurará que no queden vacíos en su proceso de aprendizaje. Destine por lo menos 30 minutos al día para practicar, experimente con nuevas maneras de utilizar las herramientas de programación que se estén estudiando y que le resulten nuevas; recuerde que además puede utilizar las ayudas de cada lenguaje para ilustrarse, por lo que usted puede elevar su nivel de aprendizaje por cuenta propia.
Tecnológico Superior Cordillera
Página 6
Desarrollo de contenidos
Unidad: Desarrollo de Videojuegos
7. Desarrollo de contenidos I. Unidad: Desarrollo de Videojuegos Objetivos Aplicar el conocimiento de las ciencias de la computación para • desarrollar soluciones informáticas con estándares de calidad.
Aplicar metodologías de análisis y diseño de sistemas para la resolución de problemas.
•
Aplicar su conocimiento en forma autónoma, innovadora y con conciencia deontológica en la búsqueda de soluciones informáticas.
•
Contenidos 1.1. Introducción a los videojuegos Los videojuegos son oficialmente desde el año 2009 una Industria Cultural reconocida en España por el congreso y es el entretenimiento de mayor volumen de negocio superando al cine y a la música con 822 millones de euros de facturación anual en España en 2012.
Actualmente el boom de las apps y los juegos para las diferentes plataformas de sobremesa, web y móviles supone una enorme oportunidad y fuente de creación de puestos de trabajo, en una industria que demanda profesionales de muy diversos perfiles. La falta de formación reglada en el sector de los videojuegos hace necesario una formación especializada por parte de los futuros profesionales para poder introducirse en una industria cada vez más competitiva pero que no para de crecer y evolucionar.
1.2.
Historia de los videojuegos 1 Durante bastante tiempo ha sido complicado señalar cual fue el primer videojuego, principalmente debido a las múltiples definiciones de este que se han ido estableciendo, pero se puede considerar como primer videojuego el Nought and crosses, también llamado OXO, desarrollado por Alexander S.Douglas en 1952. El juego era una versión computerizada del tres en raya que se ejecutaba sobre la EDSAC y permitía enfrentar a un jugador humano contra la máquina.
1
(http://www.fib.upc.edu)
Tecnológico Superior Cordillera
Página 7
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos En 1958 William Higginbotham creó, sirviéndose de un programa para el cálculo de trayectorias y un osciloscopio, Tennis for Two (tenis para dos): un simulador de tenis de mesa para entretenimiento de los visitantes de la exposición Brookhaven National Laboratory. Este videojuego fue el primero en permitir el juego entre dos jugadores humanos. Cuatro años más tarde Steve Russell, un estudiante del Instituto de Tecnología de Massachussets, dedicó seis meses a crear un juego para computadora usando gráficos vectoriales: Spacewar. En este juego, dos jugadores controlaban la dirección y la velocidad de dos naves espaciales que luchaban entre ellas. El videojuego funcionaba sobre un PDP-1 y fue el primero en tener un cierto éxito, aunque apenas fue conocido fuera del ámbito universitario. En 1966 Ralph Baer empezó a desarrollar junto a Albert Maricon y Ted Dabney, un proyecto de videojuego llamado Fox and Hounds dando inicio al videojuego doméstico. Este proyecto evolucionaría hasta convertirse en la Magnavox Odyssey, el primer sistema doméstico de videojuegos lanzado en 1972 que se conectaba a la televisión y que permitía jugar a varios juegos pregrabados.
1970-1979: La eclosión de los videojuegos Un hito importante en el inicio de los videojuegos tuvo lugar en 1971 cuando Nolan Bushnell comenzó a comercializar Computer Space, una versión de Space War, aunque otra versión recreativa de Space War como fue Galaxy War puede que se le adelantara a principios de los 70 en el campus de la universidad de Standford.
La ascensión de los videojuegos llegó con la máquina recreativa Pong que es considerada la versión comercial Unidad: Desarrollo de Videojuegos Tecnológico Superior Cordillera
Página 8
Desarrollo de contenidos
del juego Tennis for Two de Higginbotham. El sistema fue diseñado por Al Alcom para Nolan Bushnell en la recién fundada Atari. El juego se presentó en 1972 y fue la piedra angular del videojuego como industria. Durante los años siguientes se implantaron numerosos avances técnicos en los videojuegos (destacando los microprocesadores y los chips de memoria). Aparecieron en los salones recreativos juegos como Space Invaders (Taito) o Asteroids (Atari). 1980-1989: La década de los 8 bits
Los años 80 comenzaron con un fuerte crecimiento en el sector del videojuego alentado por la popularidad de los salones de máquinas recreativas y de las primeras videoconsolas aparecidas durante la década de los 70. Durante estos años destacan sistemas como Oddyssey 2 (Phillips), Intellivision (Mattel), Colecovision (Coleco), Atari 5200, Commodore 64, Turbografx (NEC). Por otro lado en las máquinas recreativas triunfaron juegos como el famoso Pacman (Namco), Battle Zone (Atari), Pole Position (Namco), Tron (Midway) o Zaxxon (Sega). El negocio asociado a esta nueva industria alcanzó grandes cosas en estos primeros años de los 80, pero sin embargo, en 1983 comenzó la llamada crisis del videojuego, afectando principalmente a Estados Unidos y Canadá, y que no llegaría a su fin hasta 1985.
Tecnológico Superior Cordillera
Página 9
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos Japón apostó por el mundo de las consolas con el éxito de la Famicom (llamada en occidente como Nintendo Entertainment System), lanzada por Nintendo en 1983 mientras en Europa se decantaba por los microordenadores como el Commodore 64 o el Spectrum. A la salida de su particular crisis los norteamericanos continuaron la senda abierta por los japoneses y adoptaron la NES como principal sistema de videojuegos. A lo largo de la década fueron apareciendo nuevos sistemas domésticos como la Master System (Sega), el Amiga (Commodore) y el 7800 (Atari) con juegos hoy en día considerados clásicos como el Tetris. A finales de los 80 comenzaron a aparecer las consolas de 16 bits como la Mega Drive de Sega y los microordenadores fueron lentamente sustituidos por las computadoras personales basadas en arquitecturas de IBM. En 1985 apareció Super Mario Bros, que supuso un punto de inflexión en el desarrollo de los juegos electrónicos, ya que la mayoría de los juegos anteriores sólo contenían unas pocas pantallas que se repetían en un bucle y el objetivo simplemente era hacer una alta puntuación. El juego desarrollado por Nintendo supuso un estallido de creatividad. Por primera vez teníamos un objetivo y un final en un videojuego. En los años posteriores otras compañías emularon su estilo de juego. En el campo de las recreativas, destacaron videojuegos como Defender, Rally-X, Dig Dug, Bubble Bobble, Gauntlet, Out Run o Shinobi además de producirse un cambio en cuanto a la nacionalidad de los juegos pasando a ser Japón la mayor productora. Otra rama de los videojuegos que creció con fuerza fue la de los videojuegos portátiles. Estos comenzaron a principios de los 70 con los primeros juegos completamente electrónicos lanzados por Mattel, los cuales difícilmente podían considerarse Tecnológico Superior Cordillera
Página 10
Desarrollo de contenidos como videojuegos, y fueron creciendo en popularidad gracias a conversiones de recreativas como las realizadas por Coleco o adictivos microjuegos como las Game & Watch de Nintendo. La evolución definitiva de las portátiles
Tecnológico Superior Cordillera
Página 11
Desarrollo de contenidos
Unidad: Desarrollo de Videojuegos Unidad: Desarrollo de Videojuegos
como plataformas de videojuego llegó en 1989 con el lanzamiento de la Game Boy (Nintendo). 1990-1999: La revolución de las 3D A principios de los años 90 las videoconsolas dieron un importante salto técnico gracias a la competición de la llamada "generación de 16 bits" compuesta por la Mega Drive, la Super Nintendo Entertainmet de Nintendo, la PC Engine de NEC, conocida como Turbografx en occidente y la CPS Changer de (Capcom).
Junto a ellas también apareció la Neo Geo (SNK) una consola que igualaba las prestaciones técnicas de un arcade pero demasiado cara para llegar de forma masiva a los hogares. Esta generación supuso un importante aumento en la cantidad de jugadores y la introducción de tecnologías como el CD-ROM, una importante evolución dentro de los diferentes géneros de videojuegos, principalmente gracias a las nuevas capacidades técnicas. Mientras tanto diversas compañías habían comenzado a trabajar en videojuegos con entornos tridimensionales, principalmente en el campo de los PC, obteniendo diferentes resultados desde las “2D y media” de Doom,
3D completas de 4D Boxing a las 3D sobre entornos pre-renderizados de Alone in Dark. Referente a las ya antiguas consolas de 16 bits, su mayor y último logro se produciría por el SNES mediante la tecnología 3-D de prerenderizados de SGI, siendo su máxima expresión juegos como Donkey Kong Country y Killer Instinct. También surgió el primero juego poligonal en consola, la competencia de la SNES, Mega-Drive, lanzó el Virtual Racing, que tuvo un gran éxito ya que marcó un antes y un después en los juegos 3D en consola. Rápidamente los videojuegos en 3D fueron ocupando un importante lugar en el mercado, principalmente gracias a la llamada "generación de 32 bits" en las videoconsolas: Sony PlayStation y Sega Saturn (principalmente en Japón); y la “generación de 64 bits” en las videoconsolas: Nintendo 64 y Atari jaguar. En cuanto a los ordenadores, se crearon las aceleradoras 3D. La consola de Sony apareció tras un proyecto iniciado con Nintendo (denominado SNES PlayStation), que consistía en un periférico para SNES con lector de CD. Al final Nintendo rechazó la propuesta de Sony, puesto que Sega había desarrollado algo parecido sin tener éxito, y Sony lanzó independientemente PlayStation. Por su parte los arcades comenzaron un lento pero imparable declive según aumentaba el acceso a consolas y ordenadores más potentes. Tecnológico Superior Cordillera
Página 12
Desarrollo de contenidos Por su parte los videojuegos portátiles, producto de las nuevas tecnologías más poderosas, comenzaron su verdadero auge, uniéndose a la Game Boy máquinas como la Game Gear (Sega), Linx (Atari) o la Neo Geo Pocket (SNK), aunque ninguna pudo hacerle frente a la popularidad de la Game Boy, siendo esta y sus descendientes (Game Boy Pocket, Game Boy Color, Game Boy Advance, Game Boy Advance SP) las dominadoras del mercado. Hacia finales de la década la consola más popular era la PlayStation con juegos como Final Fantasy VII (Square), Resident Evil (Capcom), Winning Eleven 4 (Konami), Gran Turismo (Polyphony Digital) y Metal Gear Solid (konami). En PC eran muy populares los FPS (juegos de acción en primera persona) como Quake (id Softare), Unreal (Epic Megagames) o Half-Life (Valve), y los RTS (juegos de estrategia en tiempo real) como Command & Conquer (Westwood) o Starcraft (Blizzard). Además, conexiones entre ordenadores mediante internet facilitaron el juego multijugador, convirtiéndolo en la opción predilecta de muchos jugadores, y fueron las responsables del nacimiento de los MMORPG (juegos de rol multijugador online) como Ultima Online (Origin). Finalmente en 1998 apareció en Japón la Dreamcast (Sega) y daría comienzo a la “generación de los 128 bits”. Desde el 2000: El comienzo del nuevo siglo En el 2000 Sony lanzó la anticipada PlayStation 2 y Sega lanzó otra consola con las mismas características técnicas de la Dreamcast, nada más que venia con un monitor de 14 pulgadas, un teclado, altavoces y los mismos mandos llamados Dreamcast Drivers 2000 Series CX-1.
Microsoft entra en la industria de las consolas creando la Xbox en 2001. Nintendo lanzó el sucesor de la Nintendo 64, la Gamecube, y la primera Game Boy completamente nueva desde la creación de la compañía, la Game Boy Advance. Sega viendo que no podría competir, especialmente con una nueva máquina como la de Sony, anunció que ya no produciría hardware, convirtiéndose sólo en desarrolladora de software en 2002. El ordenador personal PC es la plataforma más cara de juegos pero también la que permite mayor flexibilidad. Esta flexibilidad proviene del hecho de poder añadir al ordenador componentes que se pueden mejorar constantemente, como son tarjetas gráficas o de sonido y accesorios como volantes, pedales y mandos, etc. Además es posible actualizar los juegos con parches oficiales o con nuevos añadidos realizados por la compañía que creó el juego o por otros usuarios. Unidad: Desarrollo de Videojuegos
Tecnológico Superior Cordillera
Página 13
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos DEFINICIÓN Y ACTUALIDAD La definición de videojuego según el diccionario de la real academia de la lengua española es: "Dispositivo electrónico que permite, mediante mandos apropiados, simular juegos en las pantallas de un televisor o de un ordenador. "Pero un videojuego es mucho más que eso, es una de las principales actividades o hobbies que hoy en día la mayoría de jóvenes realiza. La industria de los videojuegos es una industria que genera más ingresos y ganancias que otras industrias, como la industria del cine, la industria de la música entre otras. En la actualidad podemos ejecutar un videojuego en diversas plataformas como un dispositivo portátil, una consola de sobremesa, una maquina arcade o un ordenador. Estas plataformas han ido evolucionando a través de los tiempos, las cuales se han dividido por generaciones la generación actual es la séptima generación y la octava generación de consolas de videojuegos se encuentra en desarrollo. 1.3. Revisión del IDE de desarrollo 2 IDE de Programación: Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación, o sea, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica. Los IDEs pueden ser aplicaciones por sí solas o pueden ser parte de aplicaciones existentes. El lenguaje Visual Basic, por ejemplo, puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Visual Basic en forma de macros para Microsoft Word. Características Los IDE ofrecen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como C++, Python, Java, C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto, como es el caso de Smalltalk u Objective-C.
Es posible que un mismo IDE pueda funcionar con varios lenguajes de programación. Este es el caso de Eclipse, al que mediante plugins se le puede añadir soporte de lenguajes adicionales. Un IDE debe tener las siguientes características:
2
-
Multiplataforma Soporte para diversos lenguajes de programación Integración con Sistemas de Control de Versiones
-
Reconocimiento de Sintaxis
(http://www.ecured.cu/)
Tecnológico Superior Cordillera
Página 14
Desarrollo de contenidos - Extensiones y Componentes para el IDE - Integración con Framework populares - Depurador - Importar y Exportar proyectos - Múltiples idiomas - Manual de Usuarios y Ayuda Componentes - Editor de texto. - Compilador. - Intérprete. - Herramientas de automatización. - Depurador. - Posibilidad de ofrecer un sistema de control de versiones. - Factibilidad para ayudar en la construcción de interfaces gráficas de usuarios. Ejemplos de IDE’s Eclipse: Entorno
de desarrollo integrado de código abierto multiplataforma para desarrollar proyectos. Esta plataforma ha sido usada para desarrollar entornos de desarrollo integrados, como el IDE de Java llamado Java Development Toolkit (JDT) y el compilador (ECJ) que se entrega como parte de Eclipse (y que son usados también para desarrollar el mismo Eclipse). También se puede usar para otros tipos de aplicaciones cliente, como BitTorrent o Azureus. En Eclipse se pueden usar diferentes lenguajes de programación como: Java, ANCI C, C++, JSP, sh, perl, php, sed. NetBeans: Programa que sirve como IDE que permite
programar en distintos lenguajes, es ideal para trabajar con el lenguaje de desarrollo JAVA (y todos sus derivados), además ofrece un excelente entorno para programar en PHP. También se puede descargar una vez instalado NetBeans, los complementos para programar en C++. La IDE de NetBeans es perfecta y muy comoda para los programadores. Tiene un excelente balance entre una interfaz con múltiples opciones y un aceptable completamiento de código. Geany: Es un IDE que hasta hace bien poquito
sólo estaba disponible para sistemas Linux, Mac OS X y BSD, pero ya está disponible para Windows. Este entorno es muy sencillo, pero Tecnológico Superior Cordillera
Página 15
Desarrollo de contenidos
Unidad: Desarrollo de Videojuegos
proporciona las funcionalidades necesarias para desarrollar aplicaciones sin problemas. Su interfaz está dividida en tres zonas: panel lateral con el árbol de carpetas y documentos abiertos, sección principal para el código y panel inferior para los mensajes de la aplicación, compilación, etc. Este IDE permite programar en diferentes lenguajes como: C, C++, Java, Python, Pascal, SQL o HTML CodeRun: Es un IDE que te permitirá programar en línea varios lenguajes,
entre ellos PHP, Ajax, C#, CSS, JavaScript y HTML. Funciona perfectamente, aunque está en inglés, es útil para quién no disponga de un buen editor a mano. 1.4. Métodos KEYPRESSED3 Para leer del teclado es necesario registrar un objeto que se encargue de "escuchar si una tecla es presionada". Este objeto conocido como "Listener" u "oyente" y tendrá métodos que serán llamados cuando alguien presione una tecla. En nuestro ejemplo el Listener se registra en el JPanel (o KeyboardExample) usando el método addKeyListener(KeyListener listener). getKeyChar (): Este es el método de la clase KeyEvent que determina el carácter que ha sido ingresada por usted. Este método devuelve el carácter asociado al KeyEvent. KeyAdapter Esta es la clase se utiliza para recibir los eventos de teclado. Crea los objetos utilizando el keyListener addKeyListener () método. El evento se genera pasa a todos los objetos KeyListener que recibe ese tipo de eventos con el addKeyListener () del objeto. KeyPressed (): Este método se ha utilizado en el programa que recibe el evento se genera cuando se pulsa una tecla para el objeto. Por encima de método también establece el texto de la fuente del caso a la etiqueta. Ejemplo:
Como manejar eventos de teclado para mover un objeto en tiempo de ejecución. En presente ejemplo les mostrará cómo mover un jLabel dentro de un jFrame. Para comenzar les muestro el aspecto que tendrá la interfaz gráfica.
3
(http://cucutaloco.wikispaces.com)
Tecnológico Superior Cordillera
Página 16
Desarrollo de contenidos
Unidad: Desarrollo de Videojuegos
Para este ejemplo la letra O se encuentra en un objeto jLabel de nombre jLabel1. Si estamos utilizando las interfaces gráficas debemos manejar los eventos de la siguiente manera:
Dependiendo del evento que necesitemos manejar podríamos seleccionar uno del listado de eventos que nos facilita Netbeans. Para utilizar los eventos debemos presionar el botón derecho del mouse y seguir la ruta que se muestra en la captura de pantalla de arriba. • Eventos
-
Key
Tecnológico Superior Cordillera
Página 17
Desarrollo de contenidos -
Unidad: Desarrollo de Videojuegos
Keypressed
Definición de las coordenadas iniciales del objeto. Inicialmente después del código de creación del jFrame debemos definir 2 variables para manipular las coordenadas. int x=350,y=350; En este caso se está indicando de manera inicial que las posiciones de x e y serán 350 para ambas variables. Modificación del constructor. Se codificó también el constructor después de código que inicializa los componentes(initcomponents). jLabel1.setLocation(x, y); Lo que hace esta línea es asignarle la posición en la que inicializará nuestro objeto. Manipulación del eventos KeyPressed.
Posteriormente se codificará el evento Keypressed del JFrame, y se incluirá el siguiente código. if(evt.getKeyCode()==37) { x=x-10; jLabel1.setLocation(x,y); } else if(evt.getKeyCode()==38) { y=y-10; jLabel1.setLocation(x,y); } else if(evt.getKeyCode()==39) { x=x+10; jLabel1.setLocation(x,y);
Tecnológico Superior Cordillera
Página 18
Unidad: Desarrollo de Videojuegos Desarrollo de contenidos
} else if(evt.getKeyCode()==40) { y=y+10; jLabel1.setLocation(x,y); }
Se utiliza evt.getKeyCode para capturar la tecla presionada, en este ejemplo se utilizaron los siguientes códigos: -
37 – Para la fecha a la izquierda 38 – Fecha hacia arriba 39 – Flecha a la derecha 40 – Fecha hacia abajo
1.5. Funciones de sonido Introducción El API de Java dedicada al sonido es la llamada Java Sound API proporcionado ya con el entorno de desarrollo de Sun. Este API se compone de 4 packages (paquetes): javax.sound.sampled. javax.sound.sampled.spi. javax.sound.midi. javax.sound.midi.spi.
El primero, javax.sound.sampled, contiene las clases necesarias para el manejo del sonido muestreado, esto incluye la captura, la mezcla y la reproducción de audio, proporcionando además algún control y efecto sobre el sonido así como interfaces para el almacenamiento, será el package estudiado en este documento. El package javax.sound.midi proporciona las interfaces de síntesis, secuenciamiento y transporte MIDI. Los packages javax.sound.sampled.spi y javax.sound.midi.spi proporcionan una interfaz para los desarrolladores de servicios basados en las interfaces anteriores.
Tecnológico Superior Cordillera
Página 19
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos Clases principales. Como paso previo es necesario contar cómo funcionan algunos de los objetos de javax.sound.sampled necesarios para comprender después cada uno de los procedimientos a seguir. Formatos de audio. 4 Los objetos de la clase AudioFormat definen el formato de una señal de audio, esto es, el número de canales, el número de bits por muestra, frecuencia de muestreo, el tamaño de la trama de voz y su frecuencia, formato de almacenamiento de los datos en memoria (big endian o little endian) y el tipo de codificación (ley a, ley m, PCM). Para guardar el tipo de codificación hay un objeto de la clase AudioFormat.Encoding con esta información. Obteniendo este objeto se puede mirar si es igual (función boolean equals(Object) ) a una de las constantes definidas en la clase AudioFormat.Encoding (ALAW, ULAW, PCM_SIGNED, PCM_UNSIGNED). La clase AudioFormat, aparte del constructor (al que hay que pasarle los parámetros para la iniciación de las variables), tiene los siguientes métodos: int getChanels();
/* Devuelve el número de canales.
*/ AudioFormat.Encoding getEncoding(); /* Devuelve objeto con información sobre el tipo de codificación. float getFrameRate(); */
*/
/* Devuelve la frecuencia de trama de la señal.
int getFrameSize(); /* Devuelve tamaño de la trama en bytes. */ float getSampleRate(); /* Devuelve la frecuencia de muestreo. */ int getSampleSizeInBits(); /* Devuelve el tamaño en bits de cada muestra de sonido. */ boolean isBigEndian(); /* Devuelve true alineamiento big endian y false little endian. */
Además de los métodos boolean maches(AudioFormat) y String toString() y los heredados de la clase Object. Por otro lado existe la clase AudioFileFormat para definir el formato de un fichero de audio, esta clase permite utilizar las clases AudioImputStream y AudioOutputStream, que heredan de ImputStream y OutputStream respectivamente, permitiendo usar los métodos estándar para la lectura y
4
(http://cprades.eresmas.com)
Tecnológico Superior Cordillera
Página 20
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos escritura del audio en ficheros. El funcionamiento de estas clases se escapa al ámbito de este documento. Arquitectura de los sistemas. La arquitectura de los sistemas de audio de audio se basa en mezcladores, clase Mixer, que son dispositivos a los que llegan líneas, objetos de clase Line, procesan los datos y salen otros objetos de clase Line.
La jerarquía de estas clases es la siguiente: Object Line Port Mixer DataLine SourceDataLine TargetDataLine Clip Mixers Como se puede ver los Mixer (mezcladores) son unos casos particulares de los Lines. Estos Mixer son dispositivos hardware o software por lo que pueden ser proporcionados por el sistema. Los objetos Mixer contienen un objeto de la clase Mixer.Info con información del tipo de Mixer. Los métodos de la clase Mixer son los siguientes: Line getLine(Line.Info);
int getMaxLines(Line.Info);
Mixer.Info getMixerInfo();
Line.Info [] getSourceLineInfo();
Line.Info [] getSourceLineInfo(Line.Info);
Tecnológico Superior Cordillera
/* Obtiene, si exixte, un Line del tipo indicado en el parámetro. */
/* Indica el numero de lineas que se pueden tener de un tipo dado. */ /* Obtiene el objeto que indica el tipo de Mixer que es. */ /* Obtiene array con información de los SourceLines disponibles. */ /* Array con información de los SourceLines de un tipo. */
Página 21
Desarrollo de contenidos
Unidad: Desarrollo de Videojuegos
Line [] getSourceLines();
/* Obtiene array con los SouceLines
disponibles.
*/
Line.Info [] getTargetLineInfo();
/* Obtiene array con información de
los TargetLines disponibles. getTargetLineInfo(Line.Info);
/* Array con
*/ Line.Info []
información de
los TargetLines de un tipo.
*/ Line [] getTargetLines();
/* Obtiene array con los TargetLines disponibles. isLineSupported(Line.Info);
*/ boolean /* Devuelve true si tiene un
del tipo especificado.
Line
*/ boolean
isSincronizationSupported( Line[], boolean); /* Devuelve true si se soporta sincronización entre las lineas especificadas en el primer parámetro, el segundo parámetro indica el tipo de sincronización: muestra a muestra si es
Lines Un Line (línea) es una conexión por la que pasa la señal desde o hacia un Mixer. Los tipos de Lines son los siguientes: Port: Puertos de entrada o salida del sistema como el micrófono, la salida de
línea, el altavoz, etc. DataLine: Líneas de datos, pueden ser Clips que almacenan un sonido
completo, SourceDataLine que proporcionan un buffer de entrada a un Mixer y TargetDataLine que proporcionan el buffer de salida de un Mixer. Mixer: Mezclador que representa un dispositivo hardware o software del
sistema. Los Lines proporcionan cierta funcionalidad al sistema por medio de objetos Control que incluyan capaces de variar alguna característica del sonido (ganancia, reverberación, etc.), del estado (el Status) que puede ser abierto y cerrado (Open y Closed) de tal manera que si el Line está cerrado no consume recursos del sistema y por último por medio de los objetos Event (eventos) lanzados que permiten comunicación y sincronización con otros objetos. Como ya veremos los objetos Line tienen un objeto (de clase Line.Info) de información sobre ellos. Como ocurre con la mayor parte de los atributos y métodos, el objeto de información se redefine en los objetos que lo heredan siendo de tipo Mixer.Info, Port.Info, etc. en cada uno de los casos.
Tecnológico Superior Cordillera
Página 22
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos
Los métodos de la clase Line son: void addLineListener( LineListener);
/* Especifica un objeto al que se le envían los Event generados. */ /* Cierra (pasa a Status Closed)
void close();
el objeto Line. Control getControl( Control.Type);
*/
/* Devuelve un objeto Control del tipo especificado.
Control [] getControls();
*/
/* Devuelve un array con los objetos Control disponibles.
Line.Info getLineInfo();
*/
/*Devuelve información del objeto.
boolean isControlSupported(Control.Type);
boolean isOpen();
*/
/* Devuelve true si soporta el tipo de Control especificado. */ /* Devuelve true si el Status es Open. */ /* Abre (pasa a Status Open) el objeto
void open();
Line. void removeLineListener(LineListener);
*/
/* Deja de enviar objetos Event al LineListener especificado. */
Clases DataLine La los objetos de la clase DataLine son las conexiones entre los Mixer y nuestro sistema. Estos objetos tienen un buffer de datos, un proceso de control interno, y una interfaz con el usuario. Como es lógico heredan todos los Métodos de la clase Line pero además implementan los siguientes: int available();
/* Indica el número de bytes que que están libres en el buffer interno. */
void drain();
/* Este método sirve bloquea el objeto hasta que quede limpio el buffer.
*/
void flush();
/* Este metodo limpia el buffer.
int getBufferSize();
/* Devuelve el tamaño del buffer en bytes.
AudioFormat getFormat();
/* Devuelve el formato del audio. manejado.
Tecnológico Superior Cordillera
*/ */
*/ Página 23
Desarrollo de contenidos int getFramePosition(); float getLevel();
Unidad: Desarrollo de Videojuegos /* Devuelve la posición de la trama. /* Devuelve el nivel de la señal.
*/ */
long getMicrosecondPosition();
/* Obtiene la posición actual de los datos de audio en microsegundos. */
boolean isActive();
/* Devuelve true si estan pasando datos (ejecutado el comando start) */
boolean isRunning();
/* Devuelve true si está abierto.
void start();
/* Comienza la reproducción.
void stop();
/* Termina la reproducción.
*/ */ */
Acceso a los componentes del sistema Para acceder a los componentes del sistema la clase AudioSystem proporciona a la aplicación un punto de entrada a los componentes instalados en el sistema. Se puede obtener información de los objetos Mixer instalados y objetos Line (sin tener que especificar el Mixer al que están asociados), proporciona métodos para realizar las conversiones de formato y métodos para trasladar el sonido a objetos Stream o File para el transporte, comunicación o almacenamiento. Los métodos accesibles de esta clase son: static AudioFileFormat getAudioFileFormat(java.io.File); static AudioFileFormat getAudioFileFormat(java.io.InputStream); static AudioFileFormat getAudioFileFormat(java.net.URL); /* Devuelven un objeto con el formato del fichero especificado en el parámetro. */ static AudioFileFormat.Type[] getAudioFileTypes(); static AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream); /* Devuelve los tipos de ficheros soportados por el sistema (sin parámetro) o por el parámetro.
*/
static AudioInputStream getAudioInputStream(AudioFormat, AudioInputStream ); static AudioInputStream getAudioInputStream(AudioFormat.Encoding, AudioInputStream); /* Devuelve un AudioImputStream */ static AudioInputStream getAudioInputStream(java.io.File); static AudioInputStream getAudioInputStream(java.io.InputStream); static AudioInputStream getAudioInputStream(java.net.URL); /* Devuelve un AudioInputStream asuciado a un fichero static Line getLine(Line.Info);
Tecnológico Superior Cordillera
Página 24
Desarrollo de contenidos
Unidad: Desarrollo de Videojuegos
/* Obtiene un objeto Line del tipo especificado en el parámetro.
*/
static Mixer getMixer(Mixer.Info); /* Obtiene un objeto Mixer del tipo especificado en el parámetro.
*/
static Mixer.Info[] getMixerInfo(); /* Obtiene un array con la información de los objetos Mixer existentes en el sistema.
*/
static Line.Info[] getSourceLineInfo(Line.Info p1); /* Obtiene un array con la información de los objetos Line existentes en el sistema.
*/
static AudioFormat.Encoding[] getTargetEncodings(AudioFormat); static AudioFormat.Encoding[] getTargetEncodings(AudioFormat.Encoding);
/*
Obtiene los tipos de codificación sopurtados para un determinado formato de audio.
*/
static AudioFormat[] getTargetFormats(AudioFormat.Encoding, AudioFormat); /* Obtiene los objetos AudioFormat de un determinado tipo.
*/
static Line.Info[] getTargetLineInfo(Line.Info); /* Obtiene información de los objetos TargetLine de un determinado tipo.
*/
static boolean isConversionSupported(AudioFormat, AudioFormat); static boolean isConversionSupported(AudioFormat.Encoding, AudioFormat);
/* Devuelve true
si se permite la canversión entre los formatos especificados. */ static boolean isFileTypeSupported(AudioFileFormat.Type); static boolean isFileTypeSupported(AudioFileFormat.Type, AudioInputStream); /* Devuelve true si se soporta el tipo de formato de fichero (para el AudioInputStream en el segundo caso).
*/ static
boolean isLineSupported(Line.Info); /* Devuelve true si en el sistema existe un objeto Line del tipo especificado. */ static int write(AudioInputStream, AudioFileFormat.Type, java.io.File); static int write(AudioInputStream, AudioFileFormat.Type, java.io.OutputStream); /* Graba los datos de audio en un fichero o en un OutputStream según el formato especificado. Devuelve el número de datos guardados. */
Para poder acceder a los distintos objetos del sistema se crean las clases de Tecnológico Superior Cordillera
Página 25
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos información, cuyas instancias proporcionan información sobre las distintas interfaces. Estas interfaces son Line.Info y las clases derivadas Mixer.Info, Port.Info y DataLine.Info. Obtención de los recursos Para obtener un objeto de la clase Mixer se puede conseguir un array de objetos Mixer.Info con todos los Mixer soportados por el sistema por medio del método getMixerInfo() de la clase AudioSystem. Con este array podemos elegir el Mixer que nos interese y obtenerlo con el método getMixer( Mixer.Info) de la clase AudioSystem.
Para obtener un objeto Line de un determinado tipo podemos obtenerlo de un Mixer (ver apartado dedicado a los objetos Mixer) o de la clase AudioSystem con el método getLine(Line.Info). Se puede construir un objeto DataLine.Info indicando en el constructor la clase del objeto del que informa (TargetDataLine.class o SourceDataLine.class) y un objeto de la clase AudioFormat. Es conveniente ver si un objeto Line del tipo deseado se soporta por el sistema, para ello se utiliza el método isLineSupported() de la clase AudioSystem antes de intentar obtenerlo. La clase Port.Info proporciona unas constantes (instancias final static de clase Port.Info) que definen algunas líneas básicas (Port.Info.COMPACT_DISC, Port.Info.HEADPHONE, Port.Info.LINE_IN, Port.Info.LINE.OUT y Port.Info.SPEAKER). Para obtener un array con información de las líneas existentes en el sistema se usan las funciones getTargetLineInfo() y getSourcetLineInfo(), de la clase AudioSystem, pasándoles los tipos de líneas que nos interesan. Por otro lado, los objetos Mixer implementan los métodos getTargetLineInfo() y getSourcetLineInfo() que no necesitan parámetros y que devuelven información sobre sus objetos Line. Con el método getLine(), del objeto Mixer, pasando como parámetro el Line.Info adecuado se obtiene la referencia al objeto Line deseado. Con estos datos es posible obtener un Line y manipularlo abriéndolo, cerrándolo, etc. Hay que advertir que no es aconsejable cambiar el Status de los Ports ya que un usuario puede tener abierto o cerrado estos puertos por conveniencia molestándole si la aplicación los cambia de estado sin su consentimiento. Reproducción de sonido Antes de entrar en la reproducción de sonido por medio de objetos SourceDataLine hay que hacer mención as los objetos Clip. Un objeto de esta clase está pensado para almacenar el audio grabado de principio a fin, es la mejor solución cuando se conoce de antemano el tamaño de la señal a almacenar y es única, así como cuando se desea repetir un sonido varias veces (por ejemplo en un lazo). Los ejemplos típicos de utilización es la reproducción de sonido de ficheros no demasiado grandes, en este caso se lee el contenido del fichero en un clip y luego se reproduce, el control es más Tecnológico Superior Cordillera
Página 26
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos sencillo y los recursos utilizados son menores. Sin embargo en los casos donde el audio es continuo o en ficheros de un gran tamaño es preferible usar los otros tipos de DataLine (SourceDataLine o TargetDataLine) con el fin de no ocupar demasiada memoria del sistema. En nuestro caso nos centraremos en este segundo caso ya que nuestra fin es la adquisición tratamiento y reproducción de la señal siéndonos de poca utilidad la clase Clip. Reproducción del sonido mediante SourceDataLine Los objetos SourceDataLine son la entrada de objetos Mixer, siendo necesario escribir en ellos los datos que se introducen en el Mixer. Los métodos de estos objetos son: void open(AudioFormat);
void open(AudioFormat, int); // Redefinen el metodo de abir de Line pasando el formato de audio // que van a manejar y, opcionalmente, el tamaño en bytes del buffer.
int write(byte [ ], int, int); El proceso a realizar para la escritura de datos en el SourceDataLine una vez obtenido es el siguiente: Se procede a abrirlo con el método propio open(AudioFormat) o open(AudioFormat, int) donde el entero indica el tamaño del buffer en bytes, si no se utilizan argumentos se pone un formato por defecto. Para conocer estos datos se pueden utilizar los métodos getFormat() y getBufferSize() del objeto SourceDataLine. Con el método start() la línea empezará a reproducir sonido en cuanto tenga algo en el buffer. Para poner datos en el buffer se usa el método int write(byte [] b, int offset, int length) donde b es el array de datos, offset indica a partir de donde, en el array b, se debe empezar a leer datos y length indica cuantos datos deben ser leídos. Esta función devuelve el número de datos leídos. Es muy importante tener en cuenta que todos estos datos vienen en bytes y no en número de muestras. Cuando sale la primera muestra del objeto Mixer (un instante después de salir del SourceDataLine) se produce un evento de tipo START que puede ser recogido por el proceso a la salida del Mixer. El método write() vuelve sólo cuando ha escrito todos los datos en el buffer. Si se intenta escribir más datos de los que caben en el buffer el método se bloquea hasta terminar. Para evitarlo con el método available() se obtiene, en bytes, el tamaño de la parte que queda libre en el buffer. Con el método drain() el programa se bloquea hasta reproducir el sonido, Tecnológico Superior Cordillera
Página 27
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos vaciando el buffer antes de volver. Con el método stop() se para la reproducción, sin limpiar el buffer, y con start() continúa dónde se quedó, para evitar la reproducción de un segmento antiguo al llamar a start() se puede utilizar el método flush() que limpia el buffer. Todos estos métodos de SourceDataLine son heredados de DataLine. Cuando deja de salir señal del Mixer procedente del SourceDataLine se genera un evento de tipo STOP. El método isActive() devuelve true si están saliendo datos (entre los eventos de tipo START y STOP), el método isRunning() devuelve true si la línea está abierta. Además Line genera eventos de tipo OPEN y CLOSE al llamarse a las funciones correspondientes. Todos los eventos pertenecen a la clase LineEvent y les debe de atender un objeto que implemente la interfaz LineListener. Para registrarlos se llama a la función de la clase Line, addLineListener(), pasando como parámetro el objeto LineListener. La interfaz LineListener sólo define un método: void update(LineEvent). Los objetos LineEvent implementan los métodos: final long getFramePosition(); final Line getLine();
// Obtiene la osicion de la trama. // Obtiene el objeto Line que lanzó el evento.
final Line Event.Type getType();
// Obtiene el tipo de evento.
LineEvent(Line, LineEvent.Type, long); // Constructor. java.lang.String toString();
// Obtiene un String para la representación.
El tipo de evento es un objeto de clase LineEvent.Type, esta clase tiene definida las constantes LineEvent.Type.CLOSE, LineEvent.Type.OPEN, LineEvent.Type.START y LineEvent.Type.STOP. Sincronización de líneas La sincronización de líneas permite que la reproducción se realice al mismo tiempo, esta sincronización puede ser mantenida o no. La sincronización se llama mantenida cuando es una sincronización muestra a muestra, es decir, durante toda la reproducción las muestras de ambas líneas salen a la par. La sincronización no mantenida es aquella en la que sólo se sincronizan los procesos de start() y stop().
Para ver si varios objetos Line se pueden sincronizar se utiliza el método, del un objeto Mixer, isSinchronizationSupported()( Line [], boolean) al que se le pasa un array con los objetos a sincronizar y un boolean que indica si la sincronización es mantenida (valor true) o no (valor false), como es lógico devuelve true si se pueden sincronizar y false si no. Captura de sonido Tras lo expuesto anteriormente en el apartado de reproducción vale con una Tecnológico Superior Cordillera
Página 28
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos pequeña referencia al apartado de captura de sonido ya que todo se hace prácticamente igual. En la captura de audio los Ports (puertos) ponen datos en el Mixer y este en un objeto TargetDataLine que tiene los métodos: void open(AudioFormat); void open(AudioFormat, int); // Redefinen el metodo de abir de Line pasando el formato de audio que //van a manejar y, opcionalmente, el tamaño en bytes del buffer.
int read(byte [], int, int); // Lee los datos desde el buffer (ver texto a continuación).
Aparte de los métodos heredados. Así se puede observar la cantidad de datos en el buffer con available() y leerlos con read(). Lo primero es obtener un objeto TargetDataLine (antes es necesario DataLine.Info) y abrirlo con open(), indicando, si es necesario, el formato de audio (si no, pone uno por defecto) y el tamaño del buffer. Para leer los datos de TargetDataLine hay que utilizar el método read() donde el primer parámetro es el array de bytes donde dejar los datos, el segundo es el offset a partir del que se dejan los datos en el array y el tercero indica el número de datos a leer. Para limpiar el buffer se utiliza el método drain(). Esta clase genera los mismos eventos que los que hemos visto en el caso anterior LineEvent, con los mismos valores como LineEvent.Type (START, STOP, OPEN y CLOSE). Procesado de la señal. Una vez capturada la señal y/o antes de la reproducción tenemos la señal en un array, momento que podemos aprovechar para el procesado de la señal, en el caso de un proceso que no sea en tiempo real este array puede ser almacenado para el procesado posterior o el procesado por parte de otro thread del programa.
Existe la posibilidad de usar los el procesado soportado por los Mixer o los DataLine mediante el uso de los objetos de clase Control, esto permite utilizar funciones básicas de estos objetos como la ganancia (gain) o la reverberación (reverb). Todo objeto Line puede implementar este procesado. Los objetos Control en un Mixer pueden afectar sólo a algunos Line asociados a él. La jerarquía de estas clases es: Control
BooleanControl Tecnológico Superior Cordillera
Página 29
Desarrollo de contenidos FloatControl
Unidad: Desarrollo de Videojuegos
EnumControl ComponentControl Cada clase hija de Control tiene un una clase Type incluida que define constantes para cada tipo de control. Para obtener un Control de un Line se puede usar el método de ese Line getControl(Control.Type) que devuelve la instancia del Control, si queremos ver que controles soporta cada Line podemos llamar al método de Line getControls() que devuelve un array con todos los objetos Control soportados. Para saber que tipo de Control es el método del Control getType() devuelve un objeto de clase Control.Type y con el método de Object getClass() se puede saber la clase derivada a la que pertenece el objeto. Para cambiar los parámetros de un objeto Control se utiliza el método setValue() el tipo del parámetro de este método depende de la clase del método. 1.6. Manejo de estructuras5 Antecedentes En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa.
-
Con las estructuras de control se puede: De acuerdo a una condición, ejecutar un grupo u otro de sentencias (IfThen-Else)
-
De acuerdo al valor de una variable, ejecutar un grupo u otro de sentencias (Select-Case) Ejecutar un grupo de sentencias mientras se cumpla una condición (DoWhile)
-
Ejecutar un grupo de sentencias hasta que se cumpla una condición (Do-Until)
-
Ejecutar un grupo de sentencias un número determinado de veces (ForNext)
5
(http://es.wikipedia.org) Tecnológico Superior Cordillera
Página 30
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos
Todas las estructuras de control tienen un único punto de entrada y un único punto de salida. Las estructuras de control se pueden clasificar en secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que permite que la programación se rija por los principios de la programación estructurada. Los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura. Tipos de estructura de control Antecedentes El término "estructuras de control", viene del campo de la ciencia computacional. Cuando se presentan implementaciones de Java para las estructuras de control, nos referimos a ellas con la terminología de la Especificación del lenguaje Java, que se refiera a ella como instrucciones. Ejecución secuencial Pero por lo general las instrucciones se ejecutan una después de la otra, en el orden en que están escritas, es decir, en secuencia. Este proceso se conoce como ejecución secuencial. Transferencia de control En Java, como en otros lenguajes de programación por excelencia como C y C++, el programador puede especificar que las siguientes instrucciones a ejecutarse tal vez no sea la siguiente en secuencia. Esto se conoce como transferencia de control. Hay que tener en cuenta que la instrucción goto es una palabra reservada pero no se utiliza ni se recomienda. Un programa bien estructurado no necesita de esta instrucción. De selección Las estructuras de control de selección, ejecutan un bloque de instrucciones u otro, o saltan a un subprograma o subrutina según se cumpla o no una condición. Estructura de control Las estructuras de control, denominadas también sentencias de control, permiten tomar decisiones y realizar un proceso repetidas veces. Se trata de estructuras muy importantes, ya que son las encargadas de controlar el f lujo de un programa, según los requerimientos del mismo. Selección if simple Se trata de una estructura de control que permite redirigir un curso de acción según la evaluación de una condición simple, sea falsa o verdadera. Tecnológico Superior Cordillera
Página 31
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos Si la condición es verdadera, se ejecuta el bloque de sentencias 1, de lo contrario, se ejecuta el bloque de sentencias 2. IF (Condición) THEN (Bloque de sentencias 1) ELSE (Bloque de sentencias 2) END IF
Se pueden plantear múltiples concisiones simultáneamente, si se cumple la (Condición 1), se ejecuta (Bloque de sentencias 1) en caso contrario se comprueba la (Condición 2), si es cierta se ejecuta (Bloque de sentencias 2), y así sucesivamente hasta n condiciones, si ninguna de ellas es cumple se ejecuta (Bloque de sentencias else). IF (Condición 1) THEN (Bloque de sentencias 1) ELSEIF (Condición 2) THEN (Bloque de sentencias 2)
..... ELSEIF (Condición n) THEN (Bloque de sentencias n) ELSE (Bloque de sentencias ELSE) END IF ------> Ejemplo: Anexo 1
Select-Case Esta sentencia permite ejecutar una de entre varias acciones en función del valor de una expresión. Es una alternativa a if then else cuando se compara la misma expresión con diferentes valores.
Se evalúa la expresión, dando como resultado un número. Luego, se recorren los "Case" dentro de la estructura buscando que el número coincida con uno de los valores. Es necesario que coincidan todos sus valores. Tecnológico Superior Cordillera
Página 32
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos Cuando se encuentra la primera coincidencia, se ejecuta el bloque de sentencias correspondiente y se sale de la estructura Select-Case. Si no se encuentra ninguna coincidencia con ningún valor, se ejecuta el bloque de sentencias de la sección "Case Else". SELECT (Expresión) CASE Valor1 (Bloque de sentencias 1) CASE Valor2 (Bloque de sentencias 2) CASE Valor n (Bloque de sentencias n) CASE ELSE (Bloque de sentencias "Else") END SELECT
Estructuras de control iterativas Las estructuras de control iterativas o de repetición, inician o repiten un bloque de instrucciones si se cumple una condición o mientras se cumple una condición. Do-While Mientras la condición sea verdadera, se ejecutarán las sentencias del bloque. DO WHILE (Condición) (Bloque de sentencias) LOOP
Que también puede expresarse: WHILE (Condición) (Bloque de sentencias) WEND
Do-Until Se ejecuta el bloque de sentencias, hasta que la condición sea verdadera DO (Bloque de sentencias) Tecnológico Superior Cordillera
Página 33
Desarrollo de contenidos
Unidad: Desarrollo de Videojuegos
LOOP UNTIL (Condición)
For-Next La sentencia For da lugar a un lazo o bucle, y permite ejecutar un conjunto de sentencias, cierto número de veces.
Primero, se evalúan las expresiones 1 y 2, dando como resultado dos números. La variable del bucle recorrerá los valores desde el número dado por la expresión 1 hasta el número dado por la expresión 2. El bloque de sentencias se ejecutará en cada uno de los valores que tome la variable del bucle. FOR (Variable) = (Expresión1) TO (Expresión2) STEP (Salto) (Bloque de sentencias) NEXT
Estructuras anidadas Las estructuras de control básicas pueden anidarse, es decir pueden ponerse una dentro de otra. Estructura For-Next dentro de una estructura If-Then-Else IF A > B THEN FOR X = 1 TO 5 (Bloque de sentencias 1) NEXT ELSE (Bloque de instrucciones 2) END IF
Estructura If-Then-Else dentro de estructura For-Next FOR x = 10 TO 20 STEP 2 IF A == C THEN (Bloque de instrucciones) ELSE (Bloque de instrucciones) END IF NEXT Tecnológico Superior Cordillera
Página 34
Desarrollo de contenidos Unidad: Desarrollo de Videojuegos Estructura For-Next que está dentro de estructura Do-While DO WHILE A > 0 FOR X = 1 TO 10 (Bloque de instrucciones) NEXT A = A - 1 LOOP
1.7.
Generación de interfaz gráfica 6
Para diseñar interfaces gráficas (Ventanas con componentes (etiquetas, cajas de texto, botones, barras de desplazamiento, etc)) Java nos proporcionado algo muy interesante, que es una biblioteca de clases denominada JFC(Java Foundation Classes =clases base de java).
6
(http://www.identi.li)
Tecnológico Superior Cordillera
Página 35
Unidad: Desarrollo de Videojuegos Desarrollo de contenidos
Actualmente allí se encuentra las siguientes API: Swing, AWT, Accesibilidad, Java 2D y soporte para arrastrar y colocar. Swing: Proporciona componentes escritos en Java para diseñar lo antes
mencionado, ejecutándose uniformemente en cualquier plataforma nativa que soporta la máquina virtual de java (JVM)
AWT(Abstract Windows Toolkit=kit de herramientas de ventanas abstractas): Proporciona un conjunto de componentes para diseñar
interfaces gráficas de usuario común a todas las plataformas nativas. ¿Pero a la hora de programar cual usamos? La diferencia entre estos es que los componentes Swing están implementados absolutamente con código no nativo lo que los hace independientes de la plataforma, razón que justifica totalmente su uso. Además proporcionan más capacidades que los componentes AWT. Los componentes Swing son fácilmente reconocibles porque comienzan el nombre con la letra J. Por ejemplo el componente AWT Button tiene su equivalente en Swing al JButton. Los componentes AWT se localizan en el paquete java.awt y los Swing en el paquete javax.swing. Todo Componente Swing es subclase de la clase Jcomponent. Estrategias de enseñanza – aprendizaje Utilizando el siguiente link: https://www.examtime.com/es
Tecnológico Superior Cordillera
Página 36
Evaluación final 1. Registrar Usuario
Unidad: Desarrollo de Videojuegos
Desarrollo de contenidos
2. Tarea 1: Realizar en el examtime un mapa conceptual de la historia de los Videojuegos y los IDE’s de desarrollo, imprimir y presentar en la
segunda clase de la Optativa, cada tema por separado. 3. Tarea 2: Realizar en el examtime un mapa conceptual de los IDE’s de desarrollo, imprimir y presentar en la tercera clase de la Optativa. 4. Tarea 3: Realizar un ejercicio por cada uno de las Estructuras de Control Iterativas. Recursos
jdk-7u25-nb-7_3_1-windows-i586 superior.
o
netbeans-7.3.1-windows o superior.
8. Evaluación final Evaluación Teórica
Nombre: ________________________________ Escuela: Análisis de Sistemas Docente: ING. ROBERTO MORALES
Nivel: SEGUNDO Jornada: ____________________ Fecha: _________________ Calificación:___________
Recomendaciones: Lea detenidamente cada una de las preguntas antes de
contestarlas, se recomienda también iniciar por las preguntas de menos complejidad.
Tecnológico Superior Cordillera
Página 37
Unidad: Desarrollo de Videojuegos Objetivo: Determinar el nivel de conocimiento adquirido por el estudiante al finalizar el módulo de Desarrollo de Videojuegos. 1. De un concepto de Videojuego
_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ 2. ¿Cuál es el nombre del considerado primer videojuego, el año de creación y por quien fue desarrollado?
_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ 3. ¿Cuál es el nombre del primer video juego que permite ya interactuar a dos personas y quien fue su creador?
_____________________________________________________________ _____________________________________________________________ 4. Hable de la historia de los videojuegos entre los años 1970- 1979.
_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________
Tecnológico Superior Cordillera
Página 38
Evaluación final
5. ¿En qué década comienza la revolución de las videoconsolas y con qué empresa?
_____________________________________________________________ _____________________________________________________________ 6. ¿Por qué se denomina Revolución de las 3D en los años 19901999?
_____________________________________________________________ _____________________________________________________________ ____________________________________________________________ _ _____________________________________________________________ 7. ¿Con qué consola aparece Sony y que pasó durante su aparición?
_____________________________________________________________ ____________________________________________________________ _ ____________________________________________________________ _ ____________________________________________________________ _ 8. ¿Qué es un IDE de programación?
_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ 9. Mencione 4 características que debe de tener un IDE de programación.
_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ ____________________________________________________________ _ ____________________________________________________________ _ 10. Mencione todos los componentes de un IDE de Programación.
Tecnológico Superior Cordillera
Página 39
Evaluación final Unidad: Desarrollo de Videojuegos _____________________________________________________________ ____________________________________________________________ _ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ ____________________________________________________________ _ _____________________________________________________________ Unidad: Desarrollo de Videojuegos
11. Defina 1 característica del IDE Eclipse
_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ 12. Defina 1 característica del IDE NetBeans
_____________________________________________________________ _____________________________________________________________ ____________________________________________________________ _ 13. ¿Cuál es la función del método getKeyChar ()?
_____________________________________________________________ _____________________________________________________________ ____________________________________________________________ _ 14. ¿Cuál es la función del método KeyPressed ()?
_____________________________________________________________ ____________________________________________________________ _ _____________________________________________________________ 15. ¿Qué paquetes componen el API Java Sound y hable de cada uno de ellos?
_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ ____________________________________________________________ _ Tecnológico Superior Cordillera
Página 40
Evaluación final _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ 16. Hable de las Instrucciones de Ejecución Secuencial
_____________________________________________________________ _____________________________________________________________ _____________________________________________________________ 17. Hable de las Instrucciones de Transferencia de Control
_____________________________________________________________ ____________________________________________________________ _ _____________________________________________________________
18. Defina las siguientes Estructuras de Control y sus sintaxis. a. FOR Definición.-
_______________________________________________________ _______________________________________________________ _______________________________________________________ Sintaxis.-
b. WHILE Definición.-
_______________________________________________________ _______________________________________________________ _______________________________________________________ Sintaxis.-
Tecnológico Superior Cordillera
Página 41
Evaluación final
Unidad: Desarrollo de Videojuegos
c. IF-THEN-ELSE Definición.-
_______________________________________________________ _______________________________________________________ _______________________________________________________ Sintaxis.-
Tecnológico Superior Cordillera
Página 42
Unidad: Desarrollo de Videojuegos Bibliografía
Evaluación Práctica Realizar un juego (Tema a elección), utilizando cualquier IDE de desarrollo
(IDE a elección). http://www.edu4java.com/es/tutoriales-programacion-java.html
9. Bibliografía http://www.fib.upc.edu/retro-informatica/historia/videojocs.html http://www.ecured.cu/index.php/IDE_de_Programaci%C3%B3n http://cucutaloco.wikispaces.com/keypress+java http://cprades.eresmas.com/Tecnica/sonidoenjava.html#formatosaudio http://es.wikipedia.org/wiki/Estructuras_de_control http://www.identi.li/index.php?topic=225732
10. Anexos Anexo 1 (Ejercicio if-.else) Ejemplo de programa Java con estructura condicional: Programa que pide por teclado la nota obtenida por un alumno y muestra un mensaje si el alumno ha aprobado.
Tecnológico Superior Cordillera
Página 43
Unidad: Desarrollo de Videojuegos /* * Programa que pide una nota por teclado y muestra un mensaje si la nota es * mayor o igual que 5*/ import java.util.*; public class Ejemplo0If { public static void main( String[] args ){ Scanner sc = new Scanner( System.in );
System.out.print("Nota: ");
nota = sc.nextInt();
int
if (nota >= 5 ){
System.out.println("Enorabuena!!"); System.out.println("Has aprobado"); } }}
Anexos
Lectura Reflexiva EL TREN DE LA VIDA La vida no es más que un viaje en tren, repleto de embarques y desembarques, salpicado de accidentes, sorpresas agradables en algunos casos y de profundas tristezas en otros. Al nacer nos subimos al tren y nos encontramos con algunas personas, las cuales creemos que siempre estarán con nosotros en este viaje (nuestros padres).
Lamentablemente la verdad es otra. Ellos se bajarán en alguna estación dejándonos huérfanos de su cariño, amistad y su compañía irreemplazable. No obstante, esto no impide que se suban otras personas que serán muy especiales para nosotros. Llegan nuestros hermanos, amigos y esos amores maravillosos. De las personas que toman este tren, habrá también los que lo hagan como un simple paseo. Otros encontrarán solamente tristeza en el viaje. Y habrá otros que, circulando por el tren, estarán siempre listos en ayudar a quien lo necesite. Muchos al bajar, dejarán una añoranza permanente. Otros pasarán desapercibidos, que ni siquiera nos daremos cuenta que desocuparon el asiento. Es curioso que algunos pasajeros, quienes nos son más queridos, se acomodan en vagones distintos al nuestro. Por lo tanto, se nos obliga hacer el Tecnológico Superior Cordillera
Página 44
Glosario Unidad: Desarrollo de Videojuegos trayecto separados de ellos. Desde luego, no se nos impide que durante el viaje, recorramos con dificultad nuestro vagón y lleguemos a ellos. Pero lamentablemente, ya no podremos sentarnos a su lado pues habrá otra persona ocupando el asiento. No importa; el viaje se hace de este modo: lleno de desafíos, sueños, fantasías, esperas y despedidas… Pero nunca habrá
regresos. Entonces hagamos este viaje de la mejor manera posible. Tratemos de relacionarnos bien con todos los pasajeros, buscando en cada uno lo mejor de ellos. Recordemos siempre que en algún momento del trayecto, ellos podrán titubear y probablemente precisaremos entenderlos. Nosotros también titubearemos y habrá alguien que nos comprenda. El gran misterio, al fin, es que no sabremos jamás en qué estación bajaremos y mucho menos dónde bajarán nuestros compañeros, ni siquiera el que está sentado en el asiento de al lado. Me quedo pensando si cuando baje del tren, sentiré nost algia… creo que sí. Separarme de algunos amigos de los que hice en el viaje será doloroso. Dejar que mis hijos sigan solos, será muy triste. Pero me aferro a la esperanza de que, en algún momento, llegaré a la estación principal y tendré la gran emoción
de verlos llegar con un equipaje que no tenían cuando embarcaron. Lo que me hará feliz, será pensar que colaboré con que el equipaje creciera y se hiciera valioso. Amigo mío, hagamos que nuestra estancia en este tren sea tranquila y que haya valido la pena. Hagamos tanto, para que cuando llegue el momento de desembarcar, nuestro asiento vacío, deje añoranza y lindos recuerdos a los que permanezcan en el viaje. A tí, que eres parte de mi tren, te deseo un… ¡¡¡Feliz viaje!!!. Enlace Video de Referencia:
https://www.youtube.com/watch?v=pd1emO24plk
11. Glosario General Applet
Tecnológico Superior Cordillera
Página 45
Unidad: Desarrollo de Videojuegos Un applet es un componente de software (código de programa) que el explorador descarga para proporcionar funciones en una página web. Los applets de Java proporcionan funciones interactivas en un explorador web mediante Java Virtual Machine (JVM). Comprobar/Seleccionar
Método por el que los usuarios introducen información en un cuadro de diálogo o página web, ya sea activando una casilla de control con el cursor para crear una marca de verificación o colocando el cursor sobre un botón de radio y haciendo clic para "pulsar" el botón. Cuadro de diálogo
Ventana especial de una interfaz de usuario gráfica que informa al usuario o le solicita información. Activar/Desactivar
Configuración del software accesible para el usuario que activa o desactiva ciertas funciones o capacidades. Resulta útil para resolver problemas de la configuración de Java, ya que se le puede solicitar al usuario que utilice un cuadro de diálogo para activar o desactivar una configuración o función específicas.
Tecnológico Superior Cordillera
Página 46
Glosario
Archivo Java (JAR)
El archivo Java (.jar) es una formato de archivo que se utiliza para agrupar varios archivos dentro de un único archivo de almacenamiento. Normalmente un archivo JAR contiene los archivos de clase y recursos auxiliares asociados a applets y aplicaciones. Java Plugin
La tecnología Java Plugin forma parte de Java Runtime Environment y establece la conexión entre los exploradores más conocidos y la plataforma Java. Esta conexión permite que los applets de sitios Web se ejecuten en el explorador en el escritorio. Caché de Java Runtime Environment (JRE)
Área de almacenamiento de la consola de Java que, en ocasiones, se debe borrar de forma manual para permitir la carga e instalación de la última versión de Java. Java Virtual Machine (JVM)
En Java, un conjunto de programas de software que permiten la ejecución de instrucciones y que normalmente están escritos en código byte de Java. Las máquinas virtuales de Java están disponibles para las plataformas de hardware y software de uso más frecuente. javaw.exe
El proceso javaw.exe es un programa propiedad de Oracle, Inc., que funciona junto con el explorador Internet Explorer como un plugin de Java. Este programa es similar al programa java.exe. La única diferencia radica en que el proceso javaw.exe no tiene ninguna ventana de consola al ejecutarse. Si no desea ver una ventana de símbolo del sistema, podría utilizar mejor el proceso javaw.exe. El archivo javaw.exe es un programa de ejecución que mostrará un cuadro de diálogo durante los momentos en los que se produzca un fallo al iniciar un programa. jucheck.exe
El proceso jucheck.exe forma parte de la instalación de Java en Windows y comprueba si hay nuevas versiones de Java. El proceso no instala Java y le notifica de que una versión más reciente esté lista para su descarga. » Más información IFTW
Tecnológico Superior Cordillera
Página 47
Glosario Unidad: Desarrollo de Videojuegos Instalación desde la Web o instalación en línea. Unidad: Desarrollo de Videojuegos
Procedimientos de instalación
Los usuarios de Java pueden escoger entre tres procedimientos de instalación: instalación en línea, fuera de línea o manual. La instalación en línea se lleva a cabo de forma automática mientras permanece conectado a Internet haciendo clic en el botón "Descarga gratuita de Java" de la página Descarga gratuita de Java. Para la instalación fuera de línea es necesario descargar un archivo ejecutable que aparece en la lista de descarga manual de Java y que incluye todos los archivos necesarios para realizar la instalación completa a discreción del usuario. No es necesario permanecer conectado a Internet durante la instalación. El archivo puede copiarse también e instalarse en otro equipo que no tenga conexión a Internet. La instalación manual descarga un archivo de programa ejecutable para instalar desde la red (IFTW) y apenas requiere intervención del usuario. Al ejecutarlo, el programa obtiene de la red todos los archivos necesarios, por lo que es imprescindible permanecer conectado a Internet durante la instalación. JRE privada
Al instalar JDK, se instala una JRE privada y, opcionalmente, una copia pública. La JRE privada se necesita para ejecutar las herramientas que incluye el JDK. No cuenta con configuración de registro y está totalmente incluida en un directorio Java (normalmente C:\Program Files\jdk1.7.0\jre) cuya ubicación sólo conoce el JDK. JRE pública
La JRE pública la pueden utilizar otras aplicaciones Java y no va incluida en el JDK (normalmente está en C:\Program Files\Java\jre1.7.0). Se registra en Windows (en HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft). Se puede eliminar con la opción Agregar o quitar programas y también se registra en los exploradores. Caché del explorador web
La caché es una zona de almacenamiento temporal en la que se guardan los datos a los que se accede con frecuencia para acelerar la carga de los mismos. La caché del explorador web guarda una copia de las páginas que pasan a través del mismo. Para solucionar ciertos problemas de instalación o
Tecnológico Superior Cordillera
Página 48