Ir al contenido principal

Entradas

Mostrando entradas de 2017

Back to work!

¡Hola! Estoy emocionado de anunciar que he retomado la actividad en mi blog "Jugando Haciendo Juegos" después de una pausa. En esta nueva etapa, el blog se centrará en proporcionar información valiosa desde dentro de la industria de los videojuegos, incluyendo trucos, curiosidades, herramientas, recursos y consejos sobre cómo crear videojuegos desde la comodidad de tu habitación utilizando Unity. El blog ya cuenta con varios artículos útiles que pueden servir como recursos iniciales. Por ejemplo, hay guías detalladas sobre cómo hacer copias de seguridad de tu código de Unity con GitHub, lo que es crucial para la gestión de versiones y el trabajo colaborativo. También encontrarás tutoriales sobre el diseño de interfaces de usuario, el desarrollo de controladores de personajes y cómo crear un PressKit para tu juego. Mi objetivo es compartir conocimientos prácticos y experiencias personales para ayudar tanto a principiantes como a desarrolladores más avanzados a mejorar sus hab

Gorilla 3D Framework

Me gustaria presentaros SantaWorkshop , un juego para Android que podeis encontrar en la Google Play Store desarrollado con Delphi Firemonkey. Para este proyecto se ha utilizado en engine de Manaz Software, Gorilla3D framework para Delphi Firemonkey. Actualmente esta framework está en versión Alpha y soportará Berlin y Tokyo. La versión gratuita incrustará una marca de agua en las imagenes y la versión de pago tendrá un precio fijo. Actualmente está información no está aún disponible en la web oficial. Estas són algunas de las características del framekork: Skin-, Skeleton- und Vertexanimations for 3D Meshes (Key-Animations) Integrated and fast Q3 Physics Engine (with collision detection) Materials: textures, bump-mapping, vertex-color, phong-, blinn-, lambert-materials, water and reflection Loading complex multi-mesh models with UV-textures Logical model management (independent from FireMonkey tree), to manage a large amount of meshes and to instanciate separatly Optimi

Simon, color vs. color (5)

En esta entrada del tutorial de programación usaremos el componente de cambio idioma que incorpora Delphi para hacer que nuestro juego sea multi idioma. Empezaremos el tutorial terminando el sistema de notificación al usuario añadiendo los TGlyph de control y añadiremos el componente TLang para el sistema multi idioma del juego. A través del tutorial aprenderás como utilizarlo y tal como expliqué en una entrada anterior del blog , utilizando la función: function TGameForm.sTextManualF(sOrg: string): string; Acceder a los campos definidos en el TLang en tiempo de ejecución para que al incio del juego o cuando se acceda a la configuración el usuario pueda cambiar de idioma y dinámicamente la interfaz cambie. Temas tratados en el tutorial: Uso de TImageList Uso de TLang Uso dinámico del sistema multi idioma

Simon, color vs. color (4)

En esta entrada terminaremos la configuración de la aplicación para Android, así como definiremos funciones dinámicas para la caja de notificación visual para mostrar mensajes a los usuarios. Para ser concretos, en este proceso, primero terminaré de configurar las opciones visuales de la aplicación, los iconos y la imagen de splah . Así mismo es necesario controlar el tipo de pantalla que se utiliza para ejecutar la aplicación. Todos sabemos que no es lo mismo ejecutar un juego en una tablet, en una phablet o en un pequeño smartphone. Cada tipo de dispositivo necesita una interfaz de usuario diferente, así como tamaños de fuente diferentes, etc. Otro de los punto significativos en un juego son las ventanas de notificación. Los juegos a diferencia de otro tipo de aplicaciones tienen cajas propias, con más o menos diseño, para notificar informaciones al usuario. El problema recae en tener que diseñar el numero de cuadros para cada tipo de notificación. La mejor solución consiste

BGM for free Shooting game

Desde Embarcadero Japón tenemos un ejemplo muy interesante de un juego sencillo pero interesante a nivel de programación desarrollado por Haruyuki Mohri . Básicamente es un shooter sobre móviles como ejemplo del uso de las liberias TBitmapAnimation y TFloatAnimation . Artículo original: Embarcadero Japón Código fuente

Simon, color vs. color (3)

En esta sesión introduciremos las primeras funciones de control en la App, así como los primeros elementos gráficos. Antes de empezar con el desarrollo de un videojuego para móviles, si se va a utilizar Internet, como es este caso, para acceder a bases de datos en la nube es necesario saber en algunos puntos del juego si disponemos de dicha conexión. Así mismo deseamos saber que tipo de dispositivo utiliza el usuario del juego, ya que en el momento de definir la interfaz de usuario es importantes, al menos, en diferenciar lo que es una tableta o un teléfono inteligente. En este ejemplo muestro esta diferenciación, pero ustedes pueden ajustar estas variables según sus necesidades. Una vez preparada las rutinas iniciales, mostraré como implementar la primera pantalla. Esta pantalla es la pantalla de carga. Muchas veces el tiempo de carga puede variar mucho dependiendo del tipo de dispositivo y funciones que se necesiten ejecutar al inicio de la aplicación, con lo cual, una panta

Simon, color vs. color (2)

Presento la primera serie que publico sobre la creación de videojuegos con Delphi Firemonkey. En esta serie explicaré paso a paso como crear juegos usando esta gran herramienta de desarrollo. Hasta ahora he hablado sobre la concepción del juego y la fase de diseño. En esta entrada presento el primer vídeo tutorial. En este vídeo explico la fase inicial del proyecto, la estructura de ficheros, la configuración del proyecto y los primeros pasos en la creación del juego. Espero que les guste.

Simon, color vs. color (1)

Cuando diseñé Simon, color vs. color , intenté aplicar las nociones de diseño que conozco. Seguramente el mayor error cometido es un exceso de complejidad en un juego diseñado para móviles. Así que en un ejercicio de autocrítica he rediseñado el juego y os presento un nuevo diseño a modo de ejemplo. En un primer diseño, el juego tenia etapas, nieveles, 4 modos de juego, multijugador, etc. Seguramente este ejemplo de complejidad no es correcto para un juego de puzzle casual, para jugar un partida en cualquier lugar. En un nuevo diseño he simplificado el modelo de juego a un solo modo de juego y un sistema muy simplificado. Además he potenciado el modelo de recompensas y de competitividad entre jugadores.   El menú general de la aplicación también es necesario simplificarlo para hacer mucho más accesible llegar al modo de juego.   Por lo que hace referencia al modo de juego también hacía falta simplificarlo ya que tanto el modo multijugador no se usaba a la práctic

Diseñando videojuegos

El error mas comun en el mundo de la programación de un videojuego es olvidar o no dar la importancia que realmente tiene el aprtado de diseño . Es comocido por todos los diseñadores de juegos que no se debe empezar a programar sin antes tener claro el diseño del mismo. Yo personallmente perfiero el diseño analógico (lapiz y libreta) para hacer mis diseños. En el mundo del diseño de juegos hay mucha literatura al respecto, pero el concepto básico en todo juego és el deseo y la diversión. Una vez realizado el diseño deberiamos poder contestarnos a estas cinco preguntas: ¿Es divertido? ¿Es desafiante? ¿No es frustrante? ¿Hay recompensa? ¿Ofrece una experiencia nueva cada vez que se juega? Según Durgan A. Nallar en su obra Diseño de videojuegos en América latina , expone los mecanismos básicos del placer lúdico en el ser humano como: Aceptación (ser aprobado) Curiosidad (aprender) Apetito (alimentos) Familia (tener descendencia) Honor (valores de clan o grupos) Ideal

Recursos

Uno de entre los principales problemas para los estudios pequeños, es que entre muy pocas personas hay que hacer un trabajo enorme donde muchas disciplinas distintas están involucradas. Es muy difícil ser un buen diseñador, programador, artista y músico a la vez para desarrollar un producto con un calidad suficiente si queremos comercializar el producto. Para ello es importante tener un banco de recursos para poder utilizar si realmente tu fuerte es la programación y no tienes tiempo o infraestructura suficiente para invertir horas y mas horas en la parte artística del desarrollo de un juego.   Yo recomiendo centrar el esfuerzo en la parte de diseño y la programación y utilizar bancos de recursos para los primeros proyectos mientras el equipo de trabajo sea pequeño. Un buen juego es como una película de cine; si el guión es sólido y los actores y actrices buenos el director tiene la mitad del trabajo hecho, pero si el guión es malo, lo mas probable será que el producto final

Delphi Boot Camp Day 4 - Game Development with Delphi

Para aquellos que os iniciéis, en el las sesiones del Boot Camp 2016, Embarcadero hizo una sesión especifica para el desarrollo de juegos utilizando Delphi. En esta sesión se mostraban 4 ejemplos de juegos desarrollados con Delphi donde a partir del mismo código funcionaban con Windows, Android y iOS. El evento dirigido por Eli M. de  FMXExpress.com  da algunas pistas interesantes sobre los principios básicos de cualquier juego y es una excelente trampolín para todos aquellos que queráis hacer algun juego multiplataforma con la misma base de código utilizando Delphi. Agenda Game loop Using TRectangle Frames UI Motion Sensor High Scores via SQLite & LiveBindings Object Pooling Sprite Sheet Animation App Tethering Cross Platform Sound Yo personalmente encontré muy interesante la solución que aporta a partir de Frames, el sistema de sonido multiplataforma y la gestión de Sprites con los Sprite Sheet Animations. El código fuente de los ejemplos lo podéis e

Simon, color vs. color (0)

Después de un tiempo de inactividad debido a problemas médicos, retomo el Bloc que empecé con ilusión hace unos meses. Mi propuesta consiste en hacer un conjunto de entradas con un paso a paso en la creación de algunos juegos utilizando Delphi desde el diseño inicial hasta la publicación y monetarización de la App a través de Google AdMob  o otras plataformas. Mi primera propuesta será una re edición de mi proyecto Simon, color vs color a partir del análisis de la aplicación, su re-diseño y la programación paso a paso de la nueva versión. Espero que les guste. Simon, color vs color, es un juego basado en el clasico SIMON de Ralph Baer y Howard J. Morrison en 1978.  El juego es básicamente un juego de memoria. Simon enciende uno de los pads de colores y suena un tono, luego dos, luego tres, etc. Los jugadores intentan hacer coincidir a Simon presionando los pads en la secuencia correcta. Si alguien falla, obtienen una sonido de error y están fuera del juego. Por supuesto, Simon

Presentación al Cool Apps Contest

Esta mañana me he decidido a presentarme al Cool Apps Contest que Embarcadero ha promocionado estos días. Creo que es una buena plataforma para que la gente descubra las posibilidades que tiene RAD Studio como herramienta para la creación de aplicaciones móviles. Lamentablemente sólo se puede presentar una aplicación por desarrollador, así que he presentado Simon, color vs. color ya que creo que es la más interesante de todas. Espero que les gusten los vídeos. Numbers Swap Simon, color vs. color

Multilenguaje

Si queremos llegar al máximo número de usuarios en nuestros juegos es importante tener en cuenta de dominar el sistema de multilenguaje. Delphi dispone en las últimas versiones de un sistema de multilenguaje que nos puede resultar muy útil. Los componentes TLabel, TButton , etc. disponen de una propiedad llamada Autotranslate que si esta activada podemos a través del componente Lang incorporar varios idiomas a la propiedad Text del los componentes. Yo personalmente prefiero no utilizar la propiedad Autotranslate y tener un procedimiento que traduzca al idioma que el jugador haya seleccionado. Para ello utilizo una función como esta para asignar los Text de todos los controles del juego. Si sitúas esta función en el inicio del juego o cunado el jugador cambia de idioma tendrás un sistema multilenguaje muy funcional. function TForm1.sTextManualF(sOrg: string): string; // translate a text, which is not in the automate translation process of TFmxObjects begin

Librerias de apoyo (App Version)

Otra herramienta útil para gestionar una aplicación móvil es conocer la versión de la aplicación. En cada entorno de desarrollo necesitamos funciones diferentes para conocer la versión en ejecución. El control de versiones es importante ya que una vez publicado un juego o aplicación todos los archivos adjuntos a la aplicación no se actualizarán. Imaginemos que nuestra app utiliza un fichero de BBDD *.db que necesitamos actualizar al publicar una nueva versión en la tienda. Cuando los usuarios actualicen la app, no sabremos desde que versión están actualizando. Además los nuevos ficheros que de distribuyen con el fichero APK serán actualizados, pero aquellos que ya existían no serán actualizados. Tener un control de la versión de la app nos permitirá controlar los cambios y actualizar los ficheros manualmente que sean necesarios. Para la gestión de versiones yo uso estas rutinas: unit AppVersion; interface {$IF DEFINED(iOS)} uses Macapi.CoreFoundation; {$ENDIF

Librerias de apoyo (FlyFilesUtils)

Cuando te enfrentas a un proyecto profesional y tu equipo de trabajo no es extenso, necesitas herramientas de apoyo para poder hacer la vida un poco más fácil. En este post os quería presentar unas librerías muy prácticas cunado desarrollas juegos en Delphi o aplicaciones móviles en general. La primera de ellas es FlyFilesUtils . Este proyecto opensource presenta algunas herramientas muy útiles para el desarrollo móvil. Para el desarrollo de juegos y aplicaciones móviles en general podemos usar las rutinas de información de dispositivos ya que nos permitirá en tiempo de ejecución conocer qué tipo de dispositivo está corriendo nuestra aplicación. // Funciones function GetScreenPixelsXY(const Context: TFmxObject = nil): TPoint; function GetScreenClientPixelsXY(const Context: TFmxObject = nil): TPoint; function GetScreenInchXY(const Context: TFmxObject = nil): TPointF; function GetScreenDPIXY(const Context: TFmxObject = nil): TPointF; function GetScreenDPI