Está en la página 1de 30

PROGRAMACIÓN MULTIMEDIA Y

DISPOSITIVOS MÓVILES UF1:


Desarrollo de aplicaciones para
dispositivos móviles
1. Análisis de tecnologías para aplicaciones en dispositivos móviles.
IDE de AS Proporciona un emulador para ejecutar apps y contiene un control de versiones.

Xamarin no se puede usar para desarrollar código para android.

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

A la hora de desarrollar una aplicación para móviles existen algunas consideraciones:


- Los dispositivos móviles Android, son mayormente dispositivos portables con hardware limitado.
- La interfaz de usuario debe ser ajustada a tamaños de pantalla pequeños.
- La mayor parte de aplicaciones requiere de una conexión de datos limitada a su ancho de banda.
- Un apartado importante que no se suele tener en cuenta es la seguridad.
- Cada dispositivo tiene características de hardware diferente.
- Uno de los principales problemas que existen a día de hoy es el consumo de batería.
- El almacenamiento interno depende del fabricante.
Optimizar el código de la aplicación lo máximo posible, tamaño de ésta no sea excesivamente pesado.

- 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

2. Ciclo de vida de una aplicación.


Una aplicación se compone de una o más actividades. Una actividad es el componente de la aplicación que
permite la interacción con el usuario, por lo tanto, una actividad es cada una de las pantallas que componen
la aplicación. Las actividades a su vez se dividen en dos partes:
Capa lógica(Activity): Establece el funcionamiento de la aplicación (archivos .java o .kt).!
Capa gráfica(Layout): Especifica los elementos forman actividades (archivos .xml que forman los layout).!

Las actividades tiene 3 estados: Resumed, Paused y Stopped.!


Las actividades en primer plano tienen 3 estados Created, Started y Resumed.
Las actividades tienen tres estados diferentes:
Resumed (en ejecución), Paused (parada, pero visble) y
Stopped (parada y no visible). Los eventos tienen lugar para que
se realicen estos cambios de estado son:

1)onCreate: Se produce al crearse la aplicación.


2)onStart: Se produce antes de mostrar la actividad(se prepara
para ser visible mientras entra en primer plano y recibe foco).
3)onResume: Se produce al mostrar la actividad. Es visible para
el usuario, es el último método que se ejecuta mientras la
actividad permanezca en 1er plano.
4)onPause:Se produce cuando la actividad no es visible.
Abandonar o Pierde foco aunque no la cierre definitivo.
5)onRestart:Se produce cuando salta de una actividad a otra.
6)onDestroy:Se produce al terminar la actividad (función
finish()). Antes de terminar una actividad, tanto desechada por
usuario o sistema ha decidido matarla xa liberar recursos.
onStop: Se ejecuta cuando la app pasa a no visible al usuario y
por tanto no va a ser usada no usada y liberada los recursos.

-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.

3. Herramientas y fases de construcción.


Toda aplicación o desarrollo en Android se lleva a cabo utilizando las denominadas herramientas del SDK
de Android. El proceso de construcción y desarrollo de una aplicación lo organizamos en fases:

(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.

El directorio donde se guardará las Pruebas Unitarias → modulo/src/test/java.


-Las pruebas que permiten probar el funcionamiento de módulos de código puro → unit tests o Pruebas
Unitarias.
-Las pruebas que nos permiten revisar el código de un módulo desde la terminal xa verificar sus correcto
funcionamiento aunq se incluyan llamadas al sistema-→ Pruebas Instrumentales.
-Herramientas de pruebas y depuración → Android testing.
-Las pruebas en Android encargadas de comprobar los módulos complejos con llamadas al propio SO son
Instrumental Test

(Fase 5) Publicación: Se genera el archivo ejecutable de la aplicación. Posteriormente se crea un certificado


digital y se firma para transferirlo a un dispositivo o publicarlo en Google Play.
-Logcat es una de las herramientas de registro que AS usa para solucionar e identificar errores en la ejecución
de nuestra app en el emulador, podemos encontrarla en las pestañas inferiores y muestra los errores del
sistema y los mensajes que configuremos en nuestra APP. Android ofrece documentos logs → Loggin Tools.
-Gradle es la funcionalidad que controla todo el mecanismo de compilación mediante unos ficheros de
configuración. Ficheros para la compilación del proyecto/app (Gradle Script) y otro xa cada módulo que
contenga el proyecto.
-APK o Bundle, app Android se empaquetan en archivos APK para ser instaladas o distribuidas(generar un
paquete de instalación). Para obtener el final, Generate Signed Bundle/APK, requiere archivo Key Store para
firmar Bundle o el APK. Pueda instalar el paquete, requiere firma certificado digital almacenado en Key
Store(Market Google → $25).

Componentes de una App


Vista(View), Layout, Actividad(Activity), Servicio(Service), Intención(Intent), Receptor de Anuncios(Broadcast
receiver) y Proveedor de Contenido(Content Provider).

4. Conceptos Básicos. Componentes de una Aplicación.


Vista(View)
El archivo layout sería activity_main.xml, tipos de vistas texto (TextView), atributo layout_widt y
layout_height indica espacio en pantalla. Atributo text es texto a representar, id referencia al objeto TextView.
Cadenas de Texto definir en el fichero res/values/string.xml. Grupo de Vistas (View Group) → objeto invisible
contener otros objetos View y ViewGroup y organizar el layout de una pantalla. Establecer jerarquía de
objetos tipo View. Objets VG instanciado misma forma que obj View (Tanto XML como Java).
Los elementos de tipo View se insertan en el layot o fichero.xml. Podemos arrastrarlos desde la paleta de
AS y se cargará todo el código asociado al elemento.
-ListView es un grupo de vistas que muestran una lista de elementos desplazables! (iconos).
El directorio donde encontramos los iconos es mipmap.

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

-FrameLayout: Todos los elementos se colocan en la parte izquierda y arriba de la


pantalla. Cambio dinámico de elementos que contiene. Desplazar por pantalla, FrameLayout especial →
ScrollView[vertical] (nodo hijo contiene elementos mostrar al desplazar pantalla) y HorizontalScrollView.

-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.

-AbsoluteLayout: Posiciona elementos de forma absoluta.

-ConstraintLayout: Versión mejorada de RelativeLayout, permite edición visual desde el editor y trabajar con
porcentajes.

Versión Layout Horizontal, Landscape Version (fichero land/layout)


Estilos y código de colores-→ values.

Paneles del Layout Inspector:


- Componente de inspector del Layout se corresponde con la definición: “Visor de pantalla”→ Muestra una
representación muy similar a la que se mostraría en el dispositivo real.

- 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.

- Componente de inspector del Layout se corresponde con la definición: “Tablas de propiedades” →


Muestra las propiedades gráficas del componente seleccionado.

Match_parent: Definir el ancho total de la vista en un 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.

-Context: Contexto, Message: Mensaje y Duration: Bandera de duración.

-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().

7. Técnicas de animación y sonido.


Imágenes aplicación → drawable. Ruta: / app/res/drawable; almacenan imagenes usarán layout, gráficos,
diálogos e iconos.
Una animación es el cambio de alguna de las propiedades de un objeto que permiten ver a éste a lo largo
del tiempo con un aspecto diferente. Android permite realizar tres tipos de animaciones:
 Animación por fotogramas: Se realiza una reproducción de imágenes mediante la clase
AnimacionDrawable. Para crear una transición de imágenes es necesario crear un archivo xml en la carpeta
/res/drawable.

 Animaciones de vistas o Tween: Permite la modificación de la imagen mediante translación, rotación,


tamaño o transparencia. Para crear una animación de este tipo es necesario crear un archivo xml en la carpeta
/res/anim.

 Animaciones de propiedades: Modificaciones del objeto, no de la vista. /res/animator


Para reproduce fuentes de audio utilizaremos la clase MediaPlayer y el archivo que se quiera utilizar debe
estar almacenado en la carpeta /res/raw (Directorio donde almacenar fichero de sonidos y vídeos para
reproducirlos desde código de un activity).
8. Servicios.
Un servicio es un proceso ejecutado(segundo plano) de forma invisible(sin que se dé cuenta el usuario/no
perciba su existencia) para el usuario y no se pueden comunicar con el usuario directamente ya que carecen
de interfaz gráfica. Todos los servicios se deben declarar en el AndroidManifest.xml mediante la etiqueta
<service>. Sobreescribir método onBind para iniciarlo y onDestroy para finalizarlo. Los servicios se ejecutan
en el dispositivo sin que se dé cuenta el usuario y los servicios iniciados siguen ejecutándose, aunque el
componente que lo ha lanzado finalice. Componente sin interfaz gráfica que se ejecuta en segundo plano.
Los hay de tres tipos:

 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.

1)Servicio iniciados2)Servicio enlazado

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.

-Bases de datos embebidas en un proyecto → SQLite


SQLite: Motor de BBDD SQL, código abierto. Almacenar información en dispositivos embebidos.
Crear, actualizar y conectar con BBDD SQLite a través clase auxiliar SQLiteOpenHelper. Único constructor,
métodos onCreate()[crear BBDD] y onUpgrade()[actualizar estructura su hubiera versión anterior]
-Bases de datos con estructura de tablas → MySQL
Para el almacenamiento de información existen distintos mecanismos:
-Bases de datos internas: BBDD en aplicación (API SQLite), se manejan utilizando sentencias SQL mediante
la clase SQLiteOpenHelper. Entre los métodos que se utilizan para ejecutar sentencias SQL nos encontramos
con execSQL cuando no hay valor de retorno y query() o rawQuery() para recuperar datos de BBDD.
-Bases de datos externas: Bases de datos mediante servicios web (FireBase-→ NoSQL).

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.

-Ficheros: Permite crear ficheros en la memoria del dispositivo o almacenamiento externo.

-XML: Permite manipular datos mediante librerías (SAX, DOM).

-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.

Objeto clase SharedPreferences a través método getSharedPreferences heredado de la clase


AppCompatActiviy.

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.

Esto es posible gracias a sus métodos:


onPreExecute():
onPostExecute(): Encargado de ejecutar el código en la hebra principal.
doInBackground(): Encargado de ejecutar el código en la hebra secundaria.
onProgressUpdate():Se usa para comunicar el progreso de la tarea.
onCancelled(): Es utilizado para finalizar la hebra.

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.

12. Comunicaciones. Clases asociadas. Tipos de conexiones.

-TELECOM: Framework(Telephony) adminstra llamadas y videollamas(API ConnectionService).

-INTERNET: ConnectivityManager comprobar conexiones disponibles.

-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.

13. Gestión de la comunicación sin hilos.


Un broadcast Receiver es un componente de la aplicación que se encarga de recibir los mensajes enviados
por el sistema operativo y otras aplicaciones. Componente que detecta y reacciona frente a mensajes
globales del sistema. Para declararlo es necesario indicarlo en el AndroidManifest.xml mediante la etiqueta
<receiver> y <intent-filter>.

Los mensajes de broadcast pueden ser enviados de dos formas:


Context.sendBroadcast: Mensajes asíncronos que pueden llegar desordenados.
Context.sendOrderedBroadcast: Se envían sincronizados garantizando su orden.

14. Envío y recepción de mensajes de texto. Seguridad y permisos.


Nivel API 23, usuario conceden permisos app mientras se ejecutan.
Permisos normales y de riesgo declarar dentro del fichero AndroidManifest. Usu concede o niega cada
permiso y la app puede continuar ejecutándose con capacidades limitada aun cuando el usuario rechace una
solicitud de permiso.

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.

¿que permisos debemos declara dentro del AndroidManifest para escribir en el


almacenamiento interno del dispositivo?
No necesitamos ningún permiso para acceder a la memoria interna del dispositivo.

-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:

-Permiso en AndroidManifest.xml grabar conversación telefónica:

-Permisos acceder a BBDD externa

- Incorporar videos a través de URLs externas configurar permisos de INTERNET

15. Tratamiento de las conexiones HTTP y HTTPS.

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.

- Eclipse no le ofreció Google para crear aplicaciones multimedia con Android.


-Google ha desarrollado un sistema de reconocimiento de voz que nos permite controlar las características
de nuestra conducción y evitar distracciones al volante.
-Memoria EPROM NO es un ejemplo de limitación a la hora de desarrollar aplicaciones.
-Cualquier señal ajena al canal puede afectar a la calidad de la misma, degradando la comunicación
Estabilidad
-Cada mecanismo adaptará a las necesidades de velocidad transmisión, consumo energía, espacio datos en
memoria,etc.Eficiencia
-Es necesario controlar que no existan agentes que puedan interceptar los canales de información y acceder
a los datos. Seguridad

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.

2. Arquitectura de la API utilizada.

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.

4. Datos basados en el tiempo.

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.

6. Reproducción de objetos multimedia. Clases.


Los estados en los que puede estar un objeto de la clase MediaPlayer → Initialized, Prepared, Started,
Stopped, Paused.

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

Audio → Gestión de audio: AudioManager, AsyncPlayer.

 AudioManager: Gestiona distintas propiedades del audio(volumen, tono,etc..).

 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.

 AsyncPlayer: Reproduce lista de audio en una hebra(thread) secundaria!.

 ToneGenerator: Sonidos sencillos como frecuencias en forma de pitido, forma sencilla de reproducir
sonidos, sin almacenar datos en memoria.

 VolumeShaper: Insertar atenuaciones de volumen al comienzo, al final o de transición entre clips de


audio.
Video
 VideoView: Reproduce vídeo.

 ExoPlayer: Reproducir video y configurar los parámetros de la reproducción. Imprescindible xa


reproducir en Streaming(especial video). No pertenece al SDK(paquete externo pero bien integrado) y
funciones alto nivel. Gran consumo de batería. Solo usarlo cuando no podamos usar MediaPlayer.

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

 MediaController: Permite visualizar controles de MediaPlayer(pausa, stop, etc..). Con él el usuario


puede controlar la reproducción de un video en una app.

 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.

 Surface: Buffer de vídeo para MediaRecorder o SurfaceTexture y controlado por MediaPlayer.


Cámara. Se utiliza como canal de vídeo para clase MediaRecorder.

 Camera, Camera2 y CameraX: Permite utilizar la cámara para fotos y vídeos.

 FaceDetector: Detecta caras de la cámara.

¿Clases para la gestión del audio? AudioManager, MediaPlayer, AsyncPlayer


-Protocolo RTP para enviar y recibir señal de audio e imagen en tiempo real como videollamadas o
contenido streaming como en radios online.

-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.

-Internalización, ruta ubica archivo cadenas → /res/values/string.xml


Ventajas: Dllo único proyecto, separar texto programación de código, ahorro de coste, fácil mto y
actualización, casi sin incremento de tamaño del proyecto. Cambiar valor variables y cambiar idioma telef.
Carpeta se guarda el fichero que define los strings en francés, como segundo idioma de la app →
res/values-fr

Cloud Platform es una app multimedia con Android, es un suite de infraestructura.


PROGRAMACIÓN MULTIMEDIA Y DISPOSITIVOS MÓVILES
UF3: Desarrollo de juegos para dispositivos móviles
1. Concepto de animación.
Una animación es el cambio de alguna de las propiedades de un objeto que permiten ver a éste a lo largo
del tiempo con un aspecto diferente. Android ofrece una serie de mecanismos dedicados a la creación de
animaciones para objetos 2D y 3D como:

 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.

2. Arquitectura del juego. Componentes.


Permite detallar cómo será la estructura de desarrollo de la app del juego, formada por una serie de
bloques:

 Interfaz de usuario: Es el punto de interacción entre el usuario y el videojuego. Su objetivo es brindar


la información necesaria para que el usuario interactuá con fluidez durante el juego!. Recoger todos los
eventos que el usuario ha creado.

 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.

 Salida: Sucesión de escenas que se van actualizando en la interfaz de usuario.

3. Motores de juego.

Un motor gráfico o motor de videojuego es la representación gráfica de una serie de rutinas de


programación que ofrecen al usuario un diseño en un escenario gráfico 2D o 3D. Su principal tarea es
proveer al juego de un motor de renderizado de gráficos (es el encargado de renderizar todas las texturas
de un mapa, todos los relieves, suavizado de objetos, etc...) para los gráficos 2D y 3D, motor físico o
detector de colisiones, sonidos, scripts de programación, animaciones, IA, gestión de memoría y
escenario gráfico…
Un motor de juegos es la parte fundamental del código de programación de un juego. Es posible clasificar
los motores en función de:

-Según las facilidades ofrecidas:


 Librerías gráficas: Según facilidades para desarrollo y uso (Allegro, Gosu, SDL, libGDX, LWJGL, Direct3D,
OpenGL).
 Motores: Si el motor ya tiene un desarrollo visual completo o requiere scripts de programación.
*Motores gráfico son Game Maker, Ogre, Unity, Unreal Engine, Cryengine, Doom Engine, Quake Engine,
SourceEngine. → Game Engine no es un motor gráfico.

 Herramientas de creación especializadas: Algunos motores se han desarrollado con carácter exclusivo
para videojuegos (GameMaker, ShiVa).

-Según su licencia: Motores privados o motores OpenSource.

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.).

Colliders en Unity – Detector de colisiones.


Eventos gestionables por Unity mediante colliders(misil impacta), tiene forma y acompaña al elemento
asociado. Collider tiene forma y acompaña al elemento asociado. 2Colliders se tocan, se producirá un
evento. Colliders 2D y 3D.
Físicas en Unity – Motor de físicas
Calcula el movimiento y determina la interacción natural de elementos representados en una escena,
teniendo en cuenta las leyes físicas. Incluye el módulo de colisiones.
Módulo rigibody, asociado el collider y tendrá un objeto transform para definir posición y el ángulo del
elemento en la escena.

Tipos de movimientos en atributo bodyType (de rigibody).


- Dynamic: Se moverá bajo estímulo. Sensible a la gravedad y fuerzas que simulemos. Si tiene un collider
asociado detectará las colisiones. Común y usado para jugador ppal o para enemigos.
- Kinematic: No se verán afectados por las leyes básicas de la física. No tiene atributos como fuerza de
rozamiento o masa. El programador especificará posición y el movimiento. Colisionan con otros Dynamic. Ej:
Puentes levadizos, puertas corredizas, etc...
- Static: No se moverán, si reciben colisiones, no se moverán. Paredes, muros, decoración del fondo, 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.

Control de audios en Unity – Motor de Sonido.


En Unity, Control de audio, sonido 3D, mezcladores de sonido en tiempo real, podemos importar archivos
de audio con formatos AIFF, Wav, MP3 y Ogg. Lo convertirá en un archivo clip. Clases:
- Audio clip: contiene los datos de sonido mono, estéreo o multicanal por audio source
- Audio source: reproduce un audio clip en la escena con audio listener o audio mixer
- Audio listener: Obtiene sonido de un audio source y lo emite por altavoces.
- Audio mixer: Procesamiento más complejo de sonido desde audio source.

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:

Allegro: Librería libre y de código abierto basada en lenguaje C.

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…).

libGDX: Librería basada en java y orientada a su uso en aplicaciones multiplataforma.

LWJGL: Librería destinada al desarrollo de juegos en lenguaje Java.

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.

Direct3D: Conjunto de librerías multimedia. Es propiedad de Microsoft y es el gran competidor de OpenGL


en el mundo de los juegos.

5. Componentes de un motor de juegos.

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).

MECANIM: Sistema de Unity que permite la animación de 3D


Animation Clips: crear animaciones de modelos 3D
Sistema Avatar: permite otorgar características especiales a los personajes humanoides.
Transform: cambiar el tamaño del personaje
Sprite multiple: podemos crear cada parte de forma independiente y juntarlo para formar un personaje.

6. API gráfico 3D.

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).

7. Estudio de juegos existentes. Publicación en Playstore.

Es recomendable hacer un estudio de mercado antes de su desarrollo, centrando la atención en aquellos


juegos de carácter similar al juego que se va a crear. Si el juego va a ser publicado en internet, es
importante conocer:

1. Conocer a qué tipo de público será destinado.


2. Conocer cuáles son las limitaciones de desarrollo.
3. Medir la cantidad de recursos necesarios para su creación, desarrollo y publicación.

Cuando se publica un juego en plataformas como Google Play, se adquiere un compromiso de


mantenimiento de esa aplicación, en la que los desarrolladores deben corregir aquellos errores que se
detecten.

8. Entornos de desarrollo para juegos.

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.

9. Integración del motor de juegos en entornos de desarrollo.

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

Sphere collider: Colisionador básico de forma esférica (pelota de un juego de fútbol).

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.

Motor de Renderizado Aplicar transformaciones a los objetos conseguir representación bidimensional


relativa a la cámara de la escena en 3D.

11. Fases de desarrollo de un juego.

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.

El resultado de la compilación de una aplicación en Android generará un ejecutable cuya extensión es


“.apk”.
12. Propiedades de los objetos.

- Materiales: Instrucciones para renderizar la superficie de un objeto.

- 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

-Luz: Puntos de iluminación en la escena. Centrar atención en un punto determinado.

-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.

13. Funciones del motor gráfico.

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.

15. Análisis de ejecución y optimización.

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.!

- Físicas: movimientos y colisiones empleadas en plataformas avanzadas 3D

- 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)

También podría gustarte