Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Kotlin → .kt
Lenguaje está escrito Fluter → Dart.
Clase hereda AppCompact, decimos que ésta hereda de una super clase que dispone de una barra de acción.
Limitaciones: Conexión de datos, seguridad, consumo batería, memoria & almacenamiento y pantalla.
-Directorio Java → Los que contengan el código Kotlin para controlar la programación de las Activities se
guardarán en este directorio.
-Versión mínima: Recursos mínimos app funcione con normalidad, anterior no podrá instalar la app. Impone
la compatibilidad con la versión del sistema según config minSdkVersion, en los archivos de compilación.
-Versión Recomendada: Requisitos debe tener dispositivo en el que se va a instalar la app. Especificar nvl de
API recomendado usando el targetSdKVersion, especificar requisitos de nvl API en archivo build.gradle(y
dentro, bloque defaultConfig).
- SDK: Software Development Kit, incluye librerías y herramientas propias; Permite a programadores a escribir
programanas en un lenguaje concreto. Gestionar la versiones de Android.
- Emulador ADB: Comunicarse con emulador o dispositivo conectado: El ADB (Android Debug Bridge) realizar
cualquier acción como dispositivo físico, permitiendo depurar app. Emulador es AVD (Android Virtual Devide)
y permite emular características de dispositivos. AVD Manager configurar nuevo emulador.
- ART (Android Runtime): Entorno de EJECUCIÓN de Android
- Tamaño px corresponde con el tamaño de texto utilizado.
- Forma de ajustar tamaños → sp para letra y dp para márgenes y padding.
Una actividad(Es el componente principal de una app Android) es cada una de las pantallas que componen
la aplicación, Activity es la parte lógica invisible al usuario que contiene el código de programación en
lenguaje Java o Kotlin y configura la funcionalidad de los elementos situados en la parte visual. App se
componen de una o más actividades. Es el componente de la app que permite la interacción con el usuario!.
Aplicaciones pueden ser totalmente desinstaladas del dispositivo. Pueden convivir ficheros Kotlin y Java.
Cada actividad necesita un archivo .java y un .xml, además de ser declarada en AndroidManifest.xml
- EditText: Campo de texto que el usuario puede rellenar. Mostrar una etiqueta de texto descriptiva dentro
de un EditText cuando no tengo contenido → android:hint
- Parecido al Switch → Checkbox
-Antes de ver la actividad por pantalla se ejecutan 3 métodos: onCreate(), onStart() y onResume().!
-Los métodos que se ejecutarán si se cierra la app → onPause(), onStop() y onDestroy().
-En el SO Android finaliza una aplicación esta decisión reside en la gestión de la pila de apps del propio
sistema Android.
-Los métodos se ejecutan al volver a la app → onRestart(), onStart() y onResume().
-Los métodos se ejecutan al cambiar de aplicación → onPause() [al cambio] y onStop()[perder el foco].
-Existiera una versión anterior, lance método para actualizar los datos con nueva info → onUpgrade()
-La actividad va a volver a ser representada después de haber pasado por onStop() → onRestart().
-Cambia la orientación, se invoca a onDestroy()
Entorno EJECUCIÓN de Android ART (Android Runtime).
MainActivity(Por defecto): Representar una pantalla de la app, función crear interfaz de usuario, app estará
formado por un conjunto de actividades indep, aunque todas trabajando xa un objetivo común. Toda
actividad ha de ser una subclase de Activity.
(Fase 1) Configuración: Se instalan todos los elementos requeridos (Android SDK, Andorid Development
Tools y Android Plataforms), por último, se instala el emulador de dispositivos ADV.
(Fase 2) Desarrollo: En esta fase se desarrolla toda la parte de programación, incluyendo código fuente,
archivos y recursos utilizados.
(Fase 3) Depuración: Debe ser integrado junto con el desarrollo para detectar y evitar futuros errores
observando la ejecución de la aplicación en tiempo real.
(Fase 4) Pruebas: Se lleva a cabo una vez se ha finalizado la fase de depuración, ya con la versión final de la
aplicación. Esta permitirá el uso de pruebas que ofrezcan resultados lo más fiable posibles.
Layout
Un layout (/res/layout) son elementos no visibles cuya función es controlar el comportamiento y establecer
la posición de los componentes gráficos (widgets) de la aplicación e indica el directorio en el que
encontramos los ficheros que definen el diseño de las pantallas de la app. La parte visual que contiene
todos los elementos que podemos representar en ella (botones, imágenes, textos, enlaces, etc) y que está
programada en XML. Contenedor de vistas, subclase View, combinar varios elementos tipo vista, usar
objetos Layout. Representa el diseño de la Interfaz Gráfica de usuario de componentes gráficos como
actividad, fragment o widget.
Layout Vertical y Layout Horizontal.
Existen diferentes tipos: FrameLayout, LinearLayout, RelativeLayout, TableLayout o GridLayout
-LinearLayout: Todos los elementos se colocan los elementos en pila (fila o en columna), de forma vertical
u horizontal.
-RelativeLayout: Todos los elementos se colocan en una posición con respecto a otro
elemento o al layout que lo contiene padre.
-TableLayout: Coloca los elementos en forma de tabla, distribuidos por elementos en cada una de las líneas.
-GridLayout: Coloca los elementos en forma tabla, indicando el número filas y columnas que tendrá la tabla.
Para realizar la distribución de los elementos debemos diferenciar entre el margin, distancia entre dos
componentes, y el padding, espacio entre el componente y su propio contenido.
-ConstraintLayout: Versión mejorada de RelativeLayout, permite edición visual desde el editor y trabajar con
porcentajes.
- Componente de inspector del Layout se corresponde con la definición: “Árbol de visitas” → Muestra un
listado de las vistas y componentes gráficos que forman el layout.
Intents
Una vez que se ha creado una actividad, debemos declararla en el AndoridManifest.xml (declaran permisos),
después, la podemos lanzar y para ello debemos crear un objeto Intent. Un intent es un elemento de
comunicación entre los distintos componentes de una aplicación (internos o externos), es el encargado de
lanzar una actividad, servicio o web en nuestra aplicación. Se lanza con el método startActivity(intent)!.
Enviar parámetros de una actividad a otra, se envían mediante el método putExtras() [Añadir información
al intent] y se reciben en la nueva actividad mediante el método getExtras().!
Bundle: Elemento para pasar información entre Activities.
Bundle va dentro de un Intent, hacer uso para pasar información al lanzar funciones StartActivity()[Actividad
lanzada sin ánimo de que devuelva un resultado] o StartActivityForResult()[Se espera un resultado de la
actividad];
5. Contexto gráfico. Conceptos.
-Menú: Componente que contiene un conjunto de opciones para navegar por la aplicación. Para crear un
menú es necesario crear un archivo xml en la carpeta /res/menu.
-Toast: Mecanismo por el cual se puede mostrar un mensaje en la actividad. Este tipo de notificaciones son
útiles para mostrar mensajes de poco interés o informar al usuario de procedimiento no crítico para el usuario.
Widget de interfaz de usuario que bloquea pantalla durante algún tiempo en forma de notificación.
Notificaciones en la barra de estado: Estas notificaciones deben tener obligatoriamente definidas en su
interfaz (icono, título y mensaje) y deberá especificar mediante código su eliminación al ser pulsada para
evitar que queden fijas en la barra de estado.
-Android Snackbar: Muestran dentro de la app, pueden realizar acciones y aparecen parte inferior de pantalla.
No más de una línea de texto. Al menos SDK 26
-Fragment: El código que ejecuta sus instrucciones se escribe en onCreateView(). Unidad de presentación
(subactividad). Ocupa toda pantalla o una parte, ventaja de pasar de un fragment a otro más sencillo que el
paso de actividades. No declara en Android Manifest y simpre embebido en Activity.
-Cuadros de Diálogo: Ventana pequeña que pide al usuario que haga determinada acción o tome decisión.
Subclases: AlertDialog(título, hasta 3botones, lista elementos o diseño personalizado) y DatePickerDialog o
TimerPickerDialog(permite seleccionar fecha o hora).
6. Eventos.
Las aplicaciones Android están pensadas para dispositivos táctiles, por lo que muchos de sus eventos están
relacionados con esta característica, es decir, son eventos de la clase View.
Los listener son las interfaces de la clase View que se encargan de capturar los eventos, es decir, de detectar
la interacción con el usuario y ejecutar las instrucciones correspondientes. Para capturar un evento es
necesario implementarlo mediante el método setOnEventListener().
Servicio Foreground o primer plano: Tarea de larga duración, pero se ve obligado a mostrar un indicador
xa q usuario sepa que está activo. Indicador notificación barra de notificaciones.
Servicio Background o segundo plano: Tarea sobre la que el usuario no tiene ningún control. A partir de
la v26 de la API de Android los servicios en segundo plano tiene muchas limitaciones. Android mata servicio
en background que lleve demasiado tiempo. Un componente inicia un servicio mediante el método
startService() y éste queda iniciado en segundo plano hasta que finalice su proceso, hay que tener en cuenta
que aunque el componente que lo ha lanzado finalice, éste seguirá ejecutándose.
Servicio enlazado o Bound: Son creados para vincular un componente con un servicio creando una
interfaz cliente-servidor que permite la comunicación entre ambos. Se realiza mediante el método
bindService() y al contrario que los servicios iniciados, éstos si finalizan si el componente elimina la
comunicación. El servicio se mantendrá activo mientras componente de app siga entrelazado a él. Crean
un canal de comunicación entre el servicio y los componentes.
9. BBDD y almacenamiento.
Directorios de almacenamiento interno guardar información sensible a las que otras app no debería acceder.
No requiere permisos xa almacenamiento interno. Otras apps pueden acceder solo si los archivos están en
directorio en almacenamiento externo.
Contenido multimedia, requiere permisos para acceder. Documentos y otros archivos, sin permisos.
Firebase: BBDD en tiempo real que pertence a Google, y que se encuentra en la nube! y se almacenan los
datos por nodos, NoSQL, no tablas ni filas sino almacén en fichero, no como registros de SQL!, agrupaba
en colecciones de objetos con campos anidados en estructura árbol de directorios, requiere cuenta, desde
consola se gestiona autenticación, seguridad, almacenamiento, hosting, funciones, etc.
Datos escriben FirebaseDatabase y recuperar adjuntar un objeto de escucha asíncrono.
Leer o escribir BBDD: instancia de DatabaseReference.
DatabaseReferencedb=FirebaseDatabase.getInstance().getReference(); → Referencia a la raíz de la BBDD
de Firebase.
-Preferencias: Almacenan la configuración del usuario(no accesible desde otras apps etiqueta
MODE_PRIVATE).
-Proveedores de contenido: Componentes que permiten la gestión de datos con otras aplicaciones y
recoger información de otras apps. Componente usado para compartir datos entre distintas apps. Recogen
información de otras apps, como puede ser el listín telefónico.
Proveedores de contenido (Componente usado para compartir datos entre distintas apps) multimedia
requieren la seguridad de que nadie podrá consumir sus productos sin haber sido autorizado.
-Room: Librería de BBDD usado para persistencia de datos de app. Intermediario app, Solicitamos el DAO
que queremos usar y DAO (Data Access Object → facilita el acceso a los datos) nos devuelve Entities, modificar
xa actualizar BBDD. Config dependencia Room en Gradle, se construye una tabla para empezar a almacenar
datos. Son interfaces y usan métodos para operaciones o modif de BBDD. Librería con la que crear y acceder
a los datos de una BBDD SQLite de forma fácil, eficiente y OO.
10. Persistencia.
Las preferencias se utilizan como mecanismo para almacenar datos de forma permanente, principalmente,
la configuración de la app. Para ello se utiliza la clase SharedPreferences(Almacenamiento de pares clave-
valor) almacenamos un fichero que luego pueden permacener privados y únicamente los podrá usar la app
que los ha creado con extensión XML. Si eliminamos la app y volvemos a instalarla, la configuración
guardada con SharedPreferences no sigue almacenada. Ruta res/xml.
Una transición es un conjunto de instrucciones que deben ejecutarse sin realizar cambios hasta que
terminan todas, es decir, si hay fallos en una el resto no tendrán cambios.
11. Modelos de hilo.
En cualquier sistema operativo es posible tener ejecutándose a la vez distintas aplicaciones, cada una en un
hilo diferente, pero también es posible tener varios hilos dentro de una misma aplicación.
Una hebra es un subproceso o hilo de ejecución, es decir, es un conjunto de tareas que se ejecutarán. Al
abrir la aplicación se creará una hebra denominada principal cuyas características son:
Es el único hilo capaz de interactuar con el usuario y se encarga de recoger los eventos.
Es el único hilo que puede modificar la interfaz gráfica.
Si la hebra principal está ocupada con alguna operación, no podrá recoger las interacciones con el usuario y
por tanto la aplicación dará apariencia de bloqueada. Si esto se alarga el sistema operativo lanzará un mensaje
de que la aplicación no responde, esto lo podemos solucionar de dos maneras:
Clase Thread
AsyncTask(Métodos Obligatorios onPostExecute() y doInBackground())→ Muy popular y usada en la
actualidad, aunque presenta algunas limitaciones.
Una tarea asíncrona es la ejecución de instrucciones en segundo plano. Estos objetos heredan de la clase
AsyncTask que se encarga de ejecutar tareas en segundo plano y a su vez permite a estas tareas modificar la
interfaz gráfica. Una tarea asíncrona es un objeto instanciado de una clase derivada de Asynctask, que
permite modificar el UI y puede ejecutar código en un hebra separada.
¿Por qué una hebra trabajadora que manda un mensaje post puede cambiar el UI?
Porque el método post del mensaje se ejecutará dentro de la hebra principal. Los métodos obligatorios
doInBackground y onPostExecute. Otros métodos también importantes son onPreExecute y
onProgressUpdate.
Se basa en la gestión de peticiones de suscripción que un objeto puede recibir de otros y que avisarán de los
posibles cambios de estado que puedan tener → Programación Reactiva.
Una de las formas más antiguas y clásicas, ligadas al lenguaje Java y pueden provocar grandes problemas si
no se controlan correctamente → Java Thread API
La clave de esta clase es la función que permite suspender la ejecución → Coroutines.
-BLUETOOTH: Classic → 1er version y Low Energy: Cantidad limitada de datos comunicación. Conecta Classic,
pero transmisión datos eficiente.
-NFC (Near Field Communication):Tecnología wireles iniciar comunicaciones a cms, + rápida y sencilla BT.
El modelo cliente-servidor se basa en una arquitectura en la que existen distintos recursos a los que se
denomina servidores, y un determinado número de clientes que requieren de esos recursos. Los sockets son
un ejemplo de éste modelo.
Un socket es un mecanismo que permite la comunicación entre aplicaciones a través de la red, es decir,
abstrae al usuario del paso de la información entre las distintas capas!. Su principal función es crear un
canal de comunicación entre las aplicaciones y simplificar el intercambio de mensajes.
Para poder enviar mensajes de texto desde la aplicación, es necesario dar permisos de la aplicación
(directorio Manifest) en el AndroidManifest.xml usando el permiso SEND_SMS mediante la etiqueta <uses-
permission>, mientras que para su recepción será necesario dar el permiso RECEIVE_SMS (en el caso de
mensajes multimedia habrá que cambiar SMS por MMS). Los mensajes se pueden enviar desde otra actividad
o directamente a través de la clase SMSManager con el método sendTextMessage.
Un PendingIntent es una comunicación con el sistema operativo que no se sabe cuándo se llevará a cabo.
Permisos declarar dentro de AndroidManifest para escribir en el almacenamiento interno del dispositivo.
Para archivos persistentes y datos caché. Sistema evita que otras apps accedan a las ubicaciones, que API
nivel 29 o posterior, esta encriptada. Almacenamiento externo es igual pero posible que otra app acceda a
los directorios. READ_EXTERNAL_STORAGE(otras app pueden acceder aunque necesita permiso) o
WRITE_EXTERNAL_STORAGE.
-Permisos normales: No ponen en riesgo privacidad, si tiene permiso en e Android Manifest, sistema
concede el permiso automáticamente.
-Permisos de riesgo: Estarán desactivados por defecto en dispositivos a partir de API 23 o superior.
Permitir que app acceda a info confidencial. Permiso peligroso, el usu debe autorizar manualmente e
explícitamente a tu app.
-Permiso en AndroidManifest.xml para poder hacer uso de la cámera:!
-Permiso en AndroidManifest.xml para poder leer un sms:
El protocolo HTTP es un protocolo cliente-servidor que se encarga de intercambiar información entre los
navegadores web y sus servidores. Es un protocolo de la capa de aplicación, basado en el protocolo HTTP
añadiendo seguridad al mismo. Las peticiones se realizan con la clase HttpURLConnection.
PHP es un lenguaje de programación que se ejecuta en el servidor y se utiliza para el desarrollo web de
contenido dinámico.
Widget: Controles de entrada son componentes visuales que usuario puede aportar información a la app
TextField no es un widget de Android
No es un servicio multimedia que puede ser usado por Android → Search Service.
No es un servicio del sistema que puede ser usado por Android → MediaPlayer Service
PROGRAMACIÓN MULTIMEDIA Y DISPOSITIVOS MÓVILES
UF2: Programación Multimedia
1. Concepto de aplicación multimedia.
Librerías multimedia de Android → SDK
Una aplicación multimedia es aquella que contiene diferentes tipos de información integradas de forma
coherente. Estos tipos de información pueden ser: texto, audio, imágenes, videos, animaciones o
interacciones.!
-File Provider: Compartir archivos de forma segura entre diferentes apps, no nos permite pasar rutas de
una app a otra de forma directa y hace referencia a un documento XML que definirá nuestras rutas.
Android no nos permite pasar rutas de app a otra de forma directa.
-Content Provider: Mecanismo que permite compartir datos con otras apps, así como obtener de apps
externas!. Android nos proporciona una serie de Content Providers ya creados que nos permite acceder a
diferentes datos de nuestro dispositivo, como el registro de llamadas o la agenda de contactos, y también
nos da la posibilidad de crear Content Providers personalizados.! Componente usado para compartir
datos entre distintas apps.
La arquitectura de Android se divide en distintas capas, teniendo siempre en cuenta que el núcleo es Linux.
Linux Kernel: Es la capa más baja. Se encarga de manejar toda la compatibilidad a nivel de hardware.!
Librerias: Capa a nivel de software que se encarga de la compatibilidad de las animaciones en 2D y 3D,
tipos de fuentes, datos…
ART (Android Runtime): Capa donde se maneja toda la magia de nuestras apps con el sistema operativo.
ART es la máquina virtual que corre las apps en el sistema operativo. Entorno de EJECUCIÓN de Android.
Aplications Framework: Capa donde se encuentran todas las clases de Java que contiene todo el SDK
de andorid.
System Apps: Es la últia capa, donde actúa el usuario.!
3. Fuentes de datos multimedia. Clases.
Un proveedor de contenido es el componente usado para compartir datos aplicaciones!, así como
obtener datos de aplicaciones externas. Las clases utilizadas para obtener información son:
Browser: Historial de navegación o búsquedas.
Calendar: Eventos del calendario.
CallLog: Registro de llamadas.
Contacts: Contactos
Documents: Ficheros de texto.
MediaSotre: Ficheros de audio, imágenes, videos…
Setting: Preferencias del sistema.
Telephony: Mensajes de texto.
UserDiccionary: Palabras definidas por el usuario.
Firebase es una base de datos en tiempo real que se encuentra en la nube. Los datos se almacenan por
nodos, no como registros de SQL. Enviar dato servidor, db.pusch().setValue(p);
Para implementar FireBase al proyecto debemos incluir el archivo .json en Project/app(en la carpeta app)
de nuestro proyecto. Los datos de la BBDD se recogen con un Listener y para enviar un dato es necesario
parsearlo.
El fichero de configuración de Firebase una vez configurado se descarga bajo el nombre de google-
services.json.
5. Procesamiento de objetos multimedia. Clases. Estados, métodos y
eventos.
Mapas: La consola de Google permite crear un proyecto de Google Maps API. Una vez creado el mapa, es
posible indicar la clave obtenida de API Maps en el archivo google_maps_api.xml que se encuentra en la
carpeta res/values. Al crear un proyecto de google API Maps este nos ofrece una clave que se podrá
pegar en todos los proyectos. Interface de prg de Google que proporciona localización
Las clases para el uso del mapa son: CameraUpdate, GoogleMap y LocationManager.
MediaStore: ficheros audio, imágenes, videos que se encuentran en dispositivo tanto memoria interna
como externa.
Sensores: Los sensores son dispositivos que recogen información del medio exterior, no siempre están
disponibles en todos los dispositivos por lo que es necesario comprobarlo antes de utilizarlos. Las clases
utilizadas para el uso de sensores son: Sensor, SensorEvent, SensorManager y SensorEventListener.
Algunos de los sensores más importantes de los dispositivos son: Acelerómetro, gravedad, giroscopio,
acelerador lineal, rotación, sensor de proximidad, luminosidad, presión, temperatura y humedad.
Existen gran cantidad de clases de Android que permiten utilizar distintos recursos multimedia,
ejemplo:
MediaCodec: Acceder a códecs del sistema. Da acceso a los ficheros de codificación-decodificación del
sistema
AudioTrack(reproducen audio): Clase de bajo nivel. Dentro de las clases que podemos usar en
MediaPlayer, clase de bajo nivel. Su poder reside en la eficiencia la hora de producir rápidamente fuentes
de audio que ya han sido decodificadas en forma de pulsos y almacenados en memoria. Comodín para
apps multimedia. Reproduce audio. Reproduce un búfer de audio PCM por hardware. Recomendado para
clips de audio demasiado grandes para ser almacenado en memoria.
SoundPool(reproducen audio): Solapar múltiples fuentes de sonido con propiedades para lanzarlas al
mismo tiempo, decidiendo en cada cuál se reproduce y cuál no. Reproduce audio. Mezclar sonidos y
establecer prioridades xa hacerlo. Usa en videojuegos (varios sonidos a la vez). Maneja y reproduce
colección recursos de audio. Reproduce desde res/raw o memoria. Carga de sonidos rápida. Puede
gestionar una cola de sonidos de forma que sepa en cada momento cuál o cuáles de ellos debe
reproducir.
ToneGenerator: Sonidos sencillos como frecuencias en forma de pitido, forma sencilla de reproducir
sonidos, sin almacenar datos en memoria.
Audio y video
JetPlayer: Reproduce audio y video desde ficheros o streams.
MediaPlayer: Reproduce audio y video! desde ficheros o streams en Android. Excepto reproducir audio
o video en Streaming. Reproducir archivos música MP3 de forma sencilla
Media Recorder: Graba audio y video. Se usa para grabar audio con el micrófono del dispositivo.
Combinado Camera2, grabar clips vídeos y guardarlos en fichero.
MediaMuxer: Mezclar streams de vídeo y audio. Mp4, webm y 3GP. Reproducir clips de sonidos.
-Protocolo de Transporte Realtime: Reproducir contenido audio digital, envio video Streaming, llamadas
VoIP(realiza videollamadas), Reproducir contenido de Prime Video.
Secuencias MIDI
Además de ficheros .midi almacenados proyectos, puede controlar dispositivos MIDI conectados USB o BT
Controlar y recibir comandos MIDI. Librería android.media.midi mostrar dispositivos MIDI. Android Q (API
29) API nativa de MIDI.
Canvas: Plantilla o lienzo que permite definir y controlar en las aplicaciones de Unity un control a
nivel de interfaz de usuario!. Supone representar cualquier objeto.
Animators (animadores): Propiedad que permite añadir a cualquier objeto a una determinada
animación mediante el uso de propiedades o estilos de programación. Cambio una o varias propiedad de un
objeto que lo hacen ser visto con un aspecto distinto a lo largo del tiempo.
Drawable Animation (Dibujables animados): Permite cargar una serie de recursos gráficos
“Drawable” para crear una animación(solapar imagen como películas animadas), como por ejemplo,
poner una imagen detrás de otra en orden.
OpenGL: Librería para gráficos de alto rendimiento 2D y 3D más importante. Android incluye soporte
xa su utilización.
Lógica del juego: Parte central del videojuego(procesar todos los eventos del evento de usuario y
dibujar continuamente la escena del juego). Comprueba el estado del juego continuamente, ya que debe
procesar todos los eventos del usuario y dibujar continuamente la escena del juego (Game loop). El
control de las colisiones y de los sprites se llevan a cabo dentro de la lógica del juego.
Recursos utilizados: Este bloque es la parte fundamental para el desarrollador. Todas las funciones
tienen que ser programadas y controladas a través de código. Los juegos a diferencia de las aplicaciones
consumen más recursos y es aquí donde se debe optimizar su uso.
Framework Android: Framework potente proporcionado por Android que permite animar gran
cantidad de objetos y representar dichos objetos con multitud de formas. Existen diferentes mecanismos
para ello.
o Property Animatrions (Animación de propiedades): Permite definir algunas propiedades de un
objeto para ser animado (duración de la animación, repetición de comportamientos, agrupación de forma
secuencial…)
o View Animations (Animación de vistas): Permite hacer uso de los diferentes mecanismos de
animación de vistas (traslaciones, rotaciones, escalados…) → res/anim
o Drawable Animation (Dibujables animados): Permite cargar una serie de recursos gráficos
“Drawable”para crear una animación en base a un serie de recursos gráficos, como por ejemplo, poner
una imagen detrás de otra en orden.
3. Motores de juego.
Herramientas de creación especializadas: Algunos motores se han desarrollado con carácter exclusivo
para videojuegos (GameMaker, ShiVa).
UNITY:
Los archivos que se importen se guardarán como assets de Unity.
Creando animaciones
Uso de sprite dividido en dos parte, cargar las que necesitamos para representar una imagen en
movimiento lo más real posible o crear escenario. La imagen se importará en el proyecto y se tomará los
elementos que se necesiten para representar el movimiento 2D como 3D.
Escenas en Unity
Visión global de elementos de la escena que forma parte del juego, en él crearemos los elementos
gráficos(fondos, árboles, rocas, nubes, enemigos, etc.).
El problema de la IA – Motor de IA
Complicado resolver problemas relacionados con sentimientos, la razón y la ética. IA en sector informático.
Motores de juegos contienen módulos IA. Machine Learning para elementos aprendan a partir de los
hechos.
Escritorio de Unity
Barra de Herramientas: Modificar los elementos del juego y moverlos por el espacio.
Jerarquía: Organizar los objetos incluir proyecto.
Pestaña Project: Todos los elementos que forman parte del paquete (Assets)
Pestaña Console: Mensajes de compilación y ejecución
SECENE: Modo de diseño, como se colocan los objetos en el mundo.
GAME: Funcionamiento del juego en tiempo de ejecución
ASSET STORE: Tienda de Asset, comprar o descargar elementos gratuitos o de pago.
MANO (tecla Q): Movernos como usuarios en la pantalla, desplazando todo el lienzo.
MOVE TOOL: Desplazar los objetos ejes X e Y
ROTATE TOOL: Rotar el objeto ángulo en eje X, Y y Z
SCALE TOOL: Reescalar el objeto ángulo en eje X, Y o en ambos al mis mo tiempo, en el cuadrado.
RECT TOOL: Mover el lemento a donde queremos y ampliar su tamaño (combinando Move y Scale).
MOVE ROTATE AND SCALE TOOL: Combinación herramientas anteriores, recomienda usar anteriores
por separado.
REPRODUCCIÓN:
PLAY: Inicia la reproducción del juego (Acciones realicemos mientras PLAY activado, se borrará).
PAUSE: Detienen la reproducción del juego.
AVANCE: Reproduce el juego fotograma a fotograma.
INSPECTOR:
Propiedades de objeto o elemento seleccionado,
Componente Transform: Indica su posición, rotación y escala.
Componente Camera: Pintar el mundo que estamos pintando en la escena.
Componente Audio Listener: Anadir un audio.
4. Librerías.
Las librerías representan figuras, polígono, luces y sombras además permiten abstraer al programador de
los aspectos más complejos de representación de elementos visuales, tan solo es necesario llamar a la
función de la librería encargada de esto y recoger el objeto devuelto para su representación en la escena.
Algunas de las librerías más importantes son:
Gosu: Librería que permite el desarrollo de juegos en 2D basada en el lenguaje C++ y Ruby.
SDL: Conjunto de librerías para el diseño de elementos 2D. Está basada en lenguaje C, aunque también
permite el uso de otros lenguajes (C++, C#, Basic…).
OpenGL: Es una de las librería de gráficos para el desarrollo de juegos 2D y 3D más importantes!. Es una
de las más utilizadas hoy en día. Es de software libre y código abierto.
Software que tiene una serie de rutinas de programación que permite el diseño, la creación y
funcionamiento de un entorno interactivo. Un motor de juegos es una parte fundamental del código de
programación de un juego. Este motor gráfico se encarga de la mayor parte de los aspectos gráficos de un
juego. Sus componentes principales de un motor de juego son:
-Librerías: Todas aquellas las librerías que proveen de las funciones básicas a los motores gráficos para
representar puntos, figuras, polígonos, luces y sombras, etc.
-Motor físico: Es el módulo responsable del cálculo del movimiento y de la interacción natural de los
elementos dentro de la escena con respecto a algún tipo de emulación de leyes físicas. Característica
relacionada animaciones. Encargado de gestionar las colisiones, animaciones, scripts de programación,
sonidos, gravedad etc. relacionada con la animaciones!.
-Motor de renderizado: Encargado de renderizar todas los texturas de un mapa, relieves, suavizado de
objetos, trazado de rayas, etc.
Estos componentes recogen de manera global todos los elementos que aparecen dentro de un juego, como
recursos:
Assets: Representa todos los elementos que forman parte del juego(Modelos, texturas, materiales,
animaciones, sonidos...).
Renderizado: Muestra el aspecto visual y potencial(texturas y materiales) en esta parte hacen uso de los
recursos diseñados para el motor gráfico. Usando assets para mostar aspecto visual y potencia del motor
gráfico.
Sonidos: Pistas de audio. El sonido del videojuego dependerá de la capacidad de procesamiento de éstos
sonidos.
Inteligencia artificial (IA): Añade estímulos al juego, permitiendo que el desarrollo del mismo suceda en
función de una toma de decisiones definida en base de un conjunto de reglas y definir comportamientos de
elementos de juego.
Scripts visuales: No solo es posible ejecutar porciones de código definidas en el juego, sino que además
se pueden ejecutar en tiempo real dentro del aspecto gráfico. Partes del juego que pueden ser ejecutadas
en tiempo real.
Sombreado y luces: El motor gráfico dota de colores y sombras a cada uno de los vértices que forman
parte de la escena. Color y sombras a todas las escenas del juego.
Para reducir el coste de esto, algunos motores emplean una serie de técnicas que permite renderizar los
terrenos o los materiales(característica texturas) y que no consumen recursos, sino que aparecen dentro
del espacio visual, a esto se le conoce como culling (Reduce el coste de procesamiento, renderiza
únicamente lo que se ve y sirve para optimizar la velocidad).
OpenGL es una API de dibujo 3D que permite realizar aplicaciones que producen gráficos. Esta API se
compone de un gran número de funciones para la creación de elementos y objetos tridimensionales.
El objetivo de estas API es proveer al desarrollador de un documento donde poder encontrar todos los
recursos, y, así disminuir la complejidad en la comunicación con las tarjetas gráficas. OpenGL desarrolló su
propio lenguaje de renderizado llamado GLSL. Otra API conocida para gráficos 3D es Direct 3D (API 3D de
bajo nivel, librería con recursos gráficos. Nivel de programación experimentado).
Los entornos de desarrollo son unas plataformas software que ofrecen una interfaz gráfica para la
creación de juegos mediante el uso de una serie de herramientas. Existen diferentes tipos de entorno, si el
objetivo es juegos 2D sencillos podemos utilizar: (potencia gráfica menor) → Spencyl y Pygame!.
Stencyl:
Plataforma que permite la creación de juegos en 2D mediante el uso de bloques de código, no es necesario
desarrollar líneas de código. Se trata de una plataforma sencilla y fácil de utilizar.
Pygame: Entorno de desarrollo de juegos en 2D que utiliza el lenguaje Python(lenguaje menos utilizado xa
creación de juegos). Se basa en el uso de sprites para los personajes y bibliotecas de recursos de sonido y
multimedia.
Si, por el contrario, nuestro objetivo es desarrollar un juego que requiera de una potencia gráfica mayor,
como en el caso del 3D, es necesario acudir a otros entornos como, por ejemplo:
-Unity 3D: Es la herramienta más utilizada en el mundo de los juegos. Tiene un motor propio para el
desarrollo de la parte gráfica que permite llevar a cabo un desarrollo muy completo de todas las escenas
del juego. Unity 3D está basado en el lenguaje de programación C# (entono gráfico tiene una potencia
gráfica mayor) permite complilar app para dispositivos basados en Android.
-Unreal Engine: Permite la configuración y diseño de recursos gráficos avanzados de la misma forma que
Unity.
El entorno de desarrollo deberá conocer dónde está el SDK para poder compilar y, posteriormente, enviar
la aplicación al dispositivo. Android no permite compilar sin un identificador de paquete, por lo que será
necesario definir dicho identificador. Dentro del apartado de ajustes del proyecto se especificarán todos los
apartados del paquete y serán los siguientes:
Resolución.
Icono.
Splash image (imagen previa al comienzo del juego).
Renderizado (parámetros).
Identificación (identificador del paquete).
Versión del código.
Nivel mínimo del API Android.
Versión de gráficos utilizados.
Procesos:
- División de animaciones
- Animaciones predivididas: exportadas una a una.
- Animaciones sin dividir: clip de duración extensa donde podemos definir el rango de frames.
- Curvas de animación: añadir datos adicionales a nuestros fotogramas claves, hacer más suaves las
transiciones o agregar nuevos timing.
- Estados de máquina: acciones típicas como andar saltar (states).State transitions-> para que el personaje
pueda pasar de un estado a otro.
• Parámetros de animación en los estados de máquina: variables definidas dentro de un Animator
Controller.
- Int: num entero
- Float: decimales
- Bool: true o false.
- Trigger: parámetro booleano que se reinicia desde el controlador cuando se realiza una
transición.
Grafo de escena-> presenta una barra de herramientas con algunas opciones que nos ayudarán en el
diseño.
10. Conceptos avanzados de programación 3D.
Un collider esta formado por un lado, de una determinada forma, que se recomienda sea lo más ajustada
a la forma del objeto, y por otro lado, de un determinado material físico, que proporcionen características
de rebote o fricción.
Un collider principal elementro del módulo físico, podrá tener asociado un collider y tendrá un objeto
transform. BodyType que define su movimiento. Son áreas que envuelven GameObject, utilizados para
detectar las colisiones entre los diferentes objetos del juego.
El Rigidbody es la propiedad que le permite a sus GameObjects actuar bajo el control de la física.!
El desarrollo y programación de un juego tridimensional conlleva aplicar algunos conceptos avanzados,
como son: los movimientos, las físicas y las colisiones (colisiones).
La clase character controller permite aplicar físicas y colisiones en forma de cápsula a los personajes
usando simple collider. Un collider está formado por un lado, de una determinada forma, que se
recomienda sea lo más ajustada a la forma del objeto, y por otro lado, de un determinado material físico,
que proporcionen características de rebote o fricción.! Los tipos de colisionadores que existen son:
Box collider: Colisionador en forma de cubo.
Capsule collider: Colisionador con forma ovalada formada por dos semi-esferas.
Mesh collider: Colisionador más preciso asociado a objetos 3D ya diseñados. Se ajusta al objeto
Componentes menores
- Physics material: permite ajustar el índice de rozamiento y elasticidad de los componentes.
- Joints: permiten unir diferentes componentes mediante una articulación
- Constant force: permite aplicar una fuerza constante al objeto.
- Effectors: unidos a los colliders, permite dirigir las fuerzas físicas de un modo personalizado cuando existe
colisión entre objetos.
Unity pone a nuestra disposición dos tipos de API para el desarrollo de videojuegos multijugador en red:
bajo nivel (mayor control) y alto nivel (controlar el estado del juego usando network manager, desarrollo de
juegos albergados en el propio cliente, serializadores de datos, envío y recepción de mensajes, envío de
comandos desde los clientes, llamadas a procedimientos remotos, envío de eventos desde el servidor).
Unity también cuenta con un sistema de partículas, éste sistema está formado por imágenes simples y
generalmente pequeñas, que aparecen en la escena repitiéndose y nos ayudan a representar fluidos,
humo, nubes, llamas… que están en movimiento.
Por último, debemos conocer la Inteligencia Artificial (IA), que nos permite crear personajes capaces de
interaccionar en la escena incluso evitando colisiones entre los elementos de la misma es NavMesh. Para
ello, a través del inspector de creación de un agente, se definen una serie de propiedades como, por
ejemplo:
-Radio que el personaje tendrá a la hora de moverse para evitar colisiones.
-Altura máxima de los obstáculos.
-Velocidad máxima en unidades por segundo.
-Aceleración del movimiento y acciones del personaje
-Área: definirá el camino que tomará el personaje y cuáles no podrá escoger.
- Finite state machines y Behavior trees: controlar el estado de agentes inteligentes y sus acciones.
- Flocking: imitar la inteligencia de colmena o de enjambre.
- Steering: algoritmos necesarios para que el agente se mueva dentro de una trayectoria preestablecida.
- Path finding y Navigation mesh: uno de los algoritmos más utilizados para calcular el movimiento de los
non-player character (NPC)
- Machine learning: trata de usar las herramientas más potentes en IA (como las redes neuronales) para
conseguir que los agentes aprendan de forma automática las tareas que necesitamos que realicen.
Los sistemas de coordenadas determinar la dirección y la orientación de los objetos, para la transformación
en los modelos y representar con exactitud todos los elementos en las escenas..
Viewport-> plano de la cámara.
Función rotate-> admite los ángulos de los tres ejes de coordenadas sobre los que debe rotar, y el espacio
sobre el que hacerlo.
Modelos y formas 3D Mejoran la calidad de los proyectos videojuegos, + reales xa simuladores. Asset Store
de Unity recursos gratuitos y pago. Gran consumo de recursos xa representación → ahorrar, formas básicas
con texturas para representar objetos que no serán principales.
1. Fase de diseño: Paso previo a la programación. Determinar cuáles son los aspectos más importantes
del juego, temática y desarrollo de la historia.
2. Diseño del código: Framework: Determina las capas que forman el juego y funcionalidad. Define el
manejo de ventana del juego, manejo de los ficheros, manejo de gráficos y manejo de audio.
3. Diseño de los Assets: Creación de elementos y modelos del juego (personajes, logos, sonidos,
botones, fuentes…).
4. Diseño de la lógica del juego: Definir el comportamiento del juego, reglas diseñadas y con el
funcionamiento de cada evento del juego.
5. Pruebas: Comprobar el comportamiento del juego, para valorar el comportamiento del juego y que
todo concuerde el resto de fases.
6. Distribución del juego: Exportar el juego y distribuirlo para otros usuarios lo puedan adquirir, instalar y
jugar.
- Shaders: Pequeños scripts con cálculos matemáticos y algoritmos para obtener el color de cada píxel
renderizado.(a partir de la luz y configuración del material).
-Texturas: Imágenes bitmap que pueden representar aspectos de la superficie de un material, como la
rugosidad y el color. Materiales. Shaders
-Reflejos y sombras: Añaden a los objetos una representación más realista .Se añade una especie de
contorno a los componentes gráficos.
Una de las labores de mayor complejidad que tiene un motor gráfico es el renderizado de objetos. Se puede
definir la renderización como el proceso de creación de una imagen 2D o 3D real dentro de una escena,
aplicando una serie de filtros a partir de un modelo diseñado. Algunas de las propiedades que definen el
proceso son:
Motion blur -> simula el desenfoque de una imagen cuando los objetos principales se mueven más
rápido que el tiempo de exposición de la cámara.
Tamaño: Define el tamaño de la renderización en pixeles.
Anti-Aliasing: Aplica un filtro de suavizado sobre objetos.
Depth buffer: Define la profundidad de los objetos 3D en una escena.
Wrap mode: Define el comportamiento de texturas.
• Simulación de velocidad de obturación: imita el desenfoque de una cámara.
• Profundidad de campo: enfoque de la lente de una cámara
• Oclusión ambiental: similitud con la realidad oscureciendo zonas.
• Intensidad o grado de oscuridad producido por defecto.
• Efecto niebla.
14. Aplicaciones de las funciones del grafo de escena.
Unity ofrece una herramienta para la organización y gestión de animaciones llamada Animator Controller
que permite crear un grafo de acciones. Su utilización suele darse durante el empleo de movimientos
direccionales del personaje, que se repiten de forma periódica hasta el suceso de otro de los eventos.
Durante el desarrollo de un juego será necesario compilar y depurar el código muchas veces. Unity ofrece
un IDE integrado (Mono Develop) para ello. En caso de producirse errores en la compilación, Unity contiene
un archivo de logs denominado Debug.log (guardar los errores en un archivo).
Otra herramienta que es útil dentro del IDE de Unity es el Unity Test Runner que comprueba el código de
programación en busca de errores antes de realizar una compilación.
A parte de éstas herramientas, es conveniente que el desarrollador tenga adquiridas una serie de buenas
prácticas de programación y estructuración del código, siendo este lo más limpio(Tener un código limpio y
definir bien las funciones declaradas es una de las buenas prácticas que permiten optimizar el código de
una aplicación!.) posible para ayudar posteriormente a la corrección y mejora de algunas funciones.
La interfaz que proporciona Unity posee varias ventanas, una de ellas es la ventana del inspector, la cual
permite visualizar y modificar las propiedades de un objeto.!
- El prefab actúa como una plantilla a partir de la cual se pueden crear nuevas instancias del objeto en la
escena.!
Test del producto: Probadores beta, beta tester-> usuarios con conocimientos avanzados en
videojuegos. El objetivo es que detecten errores.
- Aspectos avanzados en la creación de un juego es la utilización de físicas movimientos y colisiones que son
empleadas en plataforma avanzadas como el caso del 3D.
- Uno de los aspectos avanzados en la creación de un juego es la utilización de físicas, movimientos y colisiones
que son empleadas en plataformas avanzadas como el caso del 3D. V
- Efecto puede visualiza en la fotografía
(Bordes de sierra)