Hola soy Edu de Edu4Java y este es el tutorial número 2 sobre programación de juegos para Android en este tutorial vamos a aprender a dibujar una imagen en un SurfaceView esta es una Vista de bajo nivel que nos da mucha flexibilidad y es muy eficiente que es importante en los juegos para que todo pase rápido voy a hacer este tutorial siguiendo un tutorial que tengo en mi web edu4java.com para que si alguien se pierde en el camino aquí tenéis la guía.
Creemos un nuevo proyecto de Android llamado killThemall-Training. KillThemall es el nombre que le di a la pequeña aplicación que estamos desarrollando, este pequeño juego. Ok, aquí elijo el nombre del proyecto. Aquí puedes elegir lo que quieras. Vamos a elegir el 8. Para el nombre de la aplicación le vamos a llamar Killthemall. Para el paquete vamos a poner esto. Aquí vamos a escribir Principal Y aquí 7… por compatibilidad. 7 es para 2.1. Con esto podemos seleccionar finalizar y se genera el proyecto. Si has visto mis tutoriales en Android sabes que se genera un main y también se genera un diseño, no vamos a usar este diseño porque queremos un control total de la aplicación.
Vamos a interactuar directamente en la vista. Esta vista en lugar de salir de un diseño la crearemos nosotros creamos un nuevo gameView, creo que se llamó… creamos la clase crear GameView terminar… tenemos para incluir los constructores que podemos elegir… seleccionamos este… estamos obligados a elegir uno por eso tenemos que poner esto… la vista necesita una referencia a la actividad.
Aquí tenemos la referencia a la actividad que sería el Contexto. Ayúdenos con la página. En general no tenemos que hacer nada más. En la Vista tenemos el contexto, creemos un bmp un mapa de bits ehhh, pongamos esto aquí, creemos un mapa de bits, no tenemos el mapa de bits declarado, así que primero importemos el otro. Shift+ctrl+o para importar y este vamos a crear un campo ahí está ctrl+s para guardar volvamos a la página porque ya olvidé lo que estábamos haciendo. Aquí creamos el mapa de bits, luego tenemos que anular un método. llamado onDraw, este método se llamará shift+ctrl+o para la importación, este método se llamará automáticamente desde la vista. De hecho, no sé si es una vista o un titular. Una vista está dentro de un titular. . Es como un contenedor que este titular gestiona la vista. Le dice a la vista qué hacer. el titular de alguna manera ejecuta un código en la vista, dentro de la que extendemos y este código debe ejecutar este onDraw y aquí es donde podemos escribir en la aplicación.
Este objeto de lienzo aquí es como la pizarra donde podemos escribir. Imagínese que estuviéramos en la escuela y tuviéramos una pizarra y pudiéramos escribir con tiza. Escribimos a través de muchos métodos de este lienzo. Aquí podemos ver que tiene mucho lo primero que hago es decirle que ponga el fondo negro y después le digo que imprima el mapa de bits este ya lo había creado en la posición 10, 10 de este parámetro hablaremos nulo más adelante. Cuando obtengo el mapa de bits, uso este método estático de BitmapFactory y le paso los recursos, que es principalmente un método de visualización y este, si recuerdas de otros tutoriales, es un ícono que viene con la aplicación, este ícono aquí este. Vamos a utilizar este para no complicar las cosas. Más adelante usaremos otras, vamos aquí para ejecutarlas como una aplicación de Android. Vas a tener que esperar pero ya lo tenía cargado Aquí está.
Como puede ver, se abrió y se imprimió. Este es el bar que no quería. Podemos eliminarlo con la línea this en la actividad si agregamos esto aquí ctrl+shift+o para importar ctrl+s para guardar y ahora ejecutamos nuevamente aquí va otra vez ¿ Puedes ver que desapareció? ok, hasta ahora hemos estado imprimiendo con una vista, probemos con un SurfaceView lo que tenemos que hacer es reemplazar esta vista con un SurfaceView, si ejecutamos esto vamos a ver algo mal que la imagen no se imprime, Debido a que SurfaceView es una clase de nivel inferior, todo ese código del que estábamos hablando que realiza la llamada a onDraw no lo tenemos ahora, vamos a tener que llamar al método nosotros mismos para llamar al método que necesitamos para saber cuándo llamar.
y también usamos el objeto de lienzo para llamarlo. Para hacer esto, primero debemos obtener el titular y luego hacer una devolución de llamada. Aquí vamos a colocar el titular. Hay un método de titular en SurfaceView que nos da el titular. Creemos un campo porque lo vamos a usar en el futuro y aquí vamos a incluir una llamada… vamos a registrar una… una clase que es va a ser un oyente de los eventos de la devolución de llamada del Titular. Pidamos ayuda… nos da la posibilidad de crear una clase anónima que implemente la interfaz SurfaceHolder.callback aquí hay un error porque tenemos que importar la interfaz esta aquí está.
Esta es una clase interna. Esto es lo mismo que crear una nueva clase. La única diferencia es que todo está aquí del todo para que el objeto sea un oyente del SurfaceHolder, necesitamos ehh que la clase anónima implemente los métodos de la devolución de llamada de la interfaz ehh, estos métodos son destruir, lo que nos dirá cuándo se destruye la vista. cuando todo termina cuando se crea y cuando tiene un cambio lo que nos interesa ahora, es este este… este método se va a ejecutar cuando la lista esté preparada para hacer impresiones en este método vamos para poner este código el cual lo que hace es preguntarle al Holder(que viene como parámetro) también lo tenemos como propiedad pero en este caso viene como parámetro Le pregunta al titular mediante el método lockCanvas.
Este nulo no es necesario… pide el lienzo. ¿Por qué bloquear Canvas? este método bloquea el lienzo. Lo reserva para que nadie más lo use cuando tenemos c, podemos llamar al método onDraw con Canvas después de llamar a onDraw tenemos que decirle al Holder que lo desbloquee. Esto es importante porque los bloqueos van en contra del rendimiento de la aplicación. Es muy importante en los juegos porque estamos hablando de tiempo real, ejecutemos esto aquí viene. Ahora se imprime. Tuvimos que hacerlo a mano ok, esto es todo para este tutorial ¡ Te espero en el próximo!