Haciendo un Juego con .NET MAUI: Parte 1 — Sensores

rretamal
4 min readJul 23, 2024

--

English version: https://medium.com/@rretamal.dev/using-sensors-in-net-maui-4c0996f852ed

Esta fue mi actividad extracurricular del fin de semana. Tenía curiosidad de jugar un poco con sensores en una aplicación en .Net MAUI, así que para este ejercicio me propuse:

  1. Acceder a la información del acelerometro y giroscopio
  2. Hacer algo con esa información para validar las acciones en un dispositivo

Asi surgió otra vez el ¿por qué no? Y pensé que podría usar esa información para hacer un pequeño juego de naves.

Lo primero que hice fue crear el proyecto en Visual Studio usando la plantilla de .Net MAUI y ponerle un nombre. Para este caso, usé MauiGyras:

Una vez creado el proyecto veras la estructura por defecto:

Para el proyecto tuve que instalar un par de librerías usango Nuget:

  • Microsoft.Maui.Graphics
  • SkiaSharp.Views.Maui.Controls

Ya que tengas las librerías instaladas solo recuerda modificar el Maui.Program.cs, debería quedarte algo así:

Partí por el objeto que quería mover, así que diseñé una pequeña nave usando SkiaSharp, para ello en el MainPage.xaml removí el contenido por defecto y coloqué un canvas:

Todo el pintado y lo que queremos hacer ocurrirá en el evento PaintSurface del canvas, por lo que nos suscribiremos al evento en el constructor de esta manera:

canvasView.PaintSurface += CanvasView_PaintSurface;

Así que la siguiente pregunta fué, ¿cómo diantres dibujo una nave? para ello, escribí este método:

¿Qué hace el método a grandes rasgos? Genera la imagen de una nave usando formas simples: la cabina es un triángulo de color azul, las dos alas son de color azul, la cabina es un círculo amarillo, y los propulsores son dos círculos rojos. También recibe algunos parámetros como el canvas para poder pintarlo y los puntos del centro de la pantalla.

Ahora hay que llamar al método, eso lo haremos en el evento PaintSurface, por lo que solo deberías llamar al método DrawSpaceship:

Si ejecutas el proyecto deberías ver algo así:

¡Qué genial lo que pueden lograr un par de formas geométricas! En mi caso, al menos, me ahorraron buscar una imagen o generarla, jeje.

Ahora para usar los sensores necesitamos permisos!

Como verás, aquí revisamos si tenemos el sensor que necesitamos, es decir, el giroscopio y el acelerómetro, y de paso nos suscribiremos a los eventos respectivos para capturar los cambios en los valores.

La captura de datos quedaría de la siguiente manera:

Aquí capturaremos un par de valores y los guardaremos. Con el acelerómetro manejaremos la posición de la nave y con el giroscopio la rotación de la cámara.

Esto se ve de la siguiente manera si lo vemos en el dispositivo:

Podemos ver cómo se mueve la nave y cómo va variando la velocidad, pero la verdad se ve sin vida, y un label es solo eso, un label, así que agregaremos a continuación estrellas! esto nos dará una mejor percepción de las acciones que se están haciendo. Para ello, agregaremos un método que nos genere puntos aleatorios y con eso, dar la sensación de muchos puntos situados por todas partes:

Seguidamente hay que pintarlas, por lo que en PaintSurface agregaremos esta porción de código:

Aquí iremos iterando sobre las estrellas y aplicaremos una rotación para dar sensación de movimiento dependiendo de la rotación de la cámara. Además, agregaremos un efecto de alejamiento para dar profundidad y, finalmente, las pintaremos usando un círculo.

Así quedaría con el efecto de las estrellas:

Aquí usamos la información de los sensores para darle animación a un objeto por medio de SkiaSharp. En la segunda parte expandiremos un poco el demo!

https://github.com/rretamal/MauiGyras/tree/main

Happy Coding!

--

--