jueves, 2 de mayo de 2013

Ayuda a Riot Area, un juego Online multijugador sobre manifestaciones a financiarse

RIOT AREA, será un juego Online de estrategia en el que se podrá luchar en manifestaciones virtuales con tácticas basadas en la realidad. 
Este juego se puede encuadrar en el género de los juegos de Estrategia en Tiempo Real. 
Las fuerzas policiales RPO (Riot Police), brazo ejecutivo del poder vigente, responsables de mantener la seguridad y la estabilidad social chocan contra los manifestantes SOW (Social Warriors) luchando en contra de la merma de los derechos y libertades sociales. 
El conflicto entre los dos bandos es directo. 

Ayuda a este proyecto:



martes, 23 de abril de 2013

Riot Area! un juego de estrategia sobre manifestaciones

La situación de la sociedad española actual es de conflicto: el aumento de los deshaucios, disminución del empleo, privatización de la sanidad...se refleja en continuas manifestaciones en la calle. En este escenario te proponemos tomar parte en la batalla.


Riot Area, juego de estrategia sobre manifestaciones

"RIOT AREA", es un juego online en el que podrás jugar contra otros jugadores bien en solitario o ayudado por amigos. Este juego se puede encuadrar en el género de los juegos de Estrategia en Tiempo Real mezclado con el género Tower Defense (defender la posición).







miércoles, 26 de diciembre de 2012

Unity 3D + Subversion

Aunque Unity 3D tiene un servidor de versiones integrado puede resultar útil en ocasiones integrar un proyecto Unity con un servidor de versiones externo como Subversion.

Para ello hay que seguir los siguientes pasos:

  1. Crear un proyecto de Unity. Por ejemplo MyUnityProject.
  2. Habilitar los metaficheros dentro de Unity: Edit->Project Settings->Editor
  3. Cierra Unity (así verificas que se guardan todos los ficheros).
  4. Borrar el directorio Library.
  5. Comitear el proyecto entero. Desde línea de comandos:
    svn import -m"Initial project import" InitialUnityProject svn://my.svn.server.com/MyUnityProject
  6. Check out del proyecto:
    svn co svn://my.svn.server.com/MyUnityProject
    Chequea que los directorios Assets y ProjectSettings están versionados.
  7. Abre el proyecto subido al repositorio. Una vez abierto el proyecto se recrearán todos los metadatos en el directorio Library borrado en el paso 4.
  8. Opcional: Configura un filtro para ignorar el directorio Library y no versionarlo:
    svn propedit svn:ignore MyUnityProject/
    Subversion abrirá un fichero de texto. Añade el directorio Library.
  9. Finalmente comitea los cambios. Tu proyecto está subido y sincronizado!
    svn ci -m"Finishing project import" MyUnityProject


Fuente: http://docs.unity3d.com/Documentation/Manual/ExternalVersionControlSystemSupport.html

lunes, 12 de noviembre de 2012

Cambiar icono en una ventana mediante el API Windows

A veces es interesante personalizar tu aplicación y más si es un videojuego. Una manera de lograr esto es cambiar el icono de la ventana de tu aplicación.

Bien, pues algo "sencillito" como cambiar el icono de una ventana en Windows utilizando su API se puede convertir en algo infernal si una guía de como hacerlo.

Después de googlear bastante he llegado a la conclusión de que la mejor forma es mandar un mensaje a la ventana pidiendole un cambio de icono (WM_SETICON):

mInstance = GetModuleHandle(NULL);

HANDLE icon_small = LoadImage(mInstance, "C:\\crosshair.ico", IMAGE_ICON, 16, 16, LR_LOADFROMFILE);

HANDLE icon_big = LoadImage(mInstance, "C:\\crosshair32.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);

Los dos tamaños son para el icono que aparece arriba a la izquierda de la ventana y el grande es para la barra de tareas.

Una vez hecho esto y después de crear la ventana:

    // Create The Window
    mWnd = CreateWindowEx( lExStyle,
       lProperties.macApplicationName.c_str(),  // Class Name            
       lProperties.macApplicationName.c_str(),  // Window Title
       lStyle |                                                      // Defined Window Style
       WS_CLIPSIBLINGS |                            // Required Window Style
       WS_CLIPCHILDREN,                           // Required Window Style
       0, 0,                                                         // Window Position
       lWindowRect.right-lWindowRect.left,       // Calculate Window Width
       lWindowRect.bottom-lWindowRect.top,   // Calculate Window Height
       NULL,                                                     // No Parent Window
       NULL,                                                     // No Menu
       mInstance,                                                // Instance
       NULL);


Tenemos que enviar el mensaje de cambio de icono:

  SendMessage(mWnd, (UINT)WM_SETICON, ICON_SMALL, (LPARAM)icon_small);
  SendMessage(mWnd, (UINT)WM_SETICON, ICON_BIG, (LPARAM)icon_big);


Con esto ya tendríamos personalizado el icono ;-)


 

domingo, 2 de septiembre de 2012

Resolución de errores, tip #2

Usando VC++ 2008 y DirectX.

Error:

  • error LNK1181: no se puede abrir el archivo de entrada 'dxguid.lib'
Tu proyecto está utilizando DirectX SDK y o no lo tienes instalado en tu equipo o tienes que incluir en los directorios de VC++.

Solución:
Instala DirectX SDK por ejemplo DirectX DSK Febrero 2010 (que todavía incluia Direct Input).

Ve a:

Herramientas->Opciones->Proyectos y soluciones->Directorios de VC++



y añade el directorio correspondiente para las librerias de DirectX, en mi caso $(DXSDK_DIR)/Lib/x86

sábado, 17 de septiembre de 2011

Resolución de errores, tip #1

Usando VC++ 2008 y DirectX.

Error:

  • error C2440: '=' : no se puede realizar la conversión de 'const char *' a 'LPCWSTR'
  • error C2664: no se puede convertir el parámetro 2 de 'const char [X]' a 'LPCWSTR' 
Estos errores de conversión se producen debido a que DirectX por defecto usa el juego de caracteres UNICODE mientras que el resto de tu proyecto no.

Solución:

Ve a:

Propiedades de proyecto->Propiedades de configuracion->General->Juego de caracteres

y cambia "Utilizar juego de caracteres Unicode" por "Utilizar juego de caracteres multibyte".

sábado, 5 de marzo de 2011

Configurar OpenGL y GLUT en Windows (Visual Studio)

Configurar OpenGL y GLUT en Visual Studio de Windows es también muy sencillo.
  1. Aunque OpenGL viene con todas las versiones de Windows, GLUT hace falta descargarlo. Esto se puede hacer desde la web de Nate Robins (glut-3.7.6-bin.zip).
  2. Después de descomprimirlo borramos los ficheros glut.def y README-win32.txt.
  3. Copiamos la dll glut32.dll en %WinDir%\System32 (C:\Windows\System32 por ejemplo).
  4. También copiamos la librería glut32.lib en el subdirectorio lib de VC (C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib en Windows 7/Vista o  C:\Program Files\Microsoft Visual Studio 9.0\VC\lib en Windows XP por ejemplo).
  5. Después crear el subdirectorio gl en el directorio include de VC y copiar allí el fichero de cabecera glut32.h (C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\gl o C:\Program Files\Microsoft Visual Studio 9.0\VC\include\gl).
El siguiente video muestra los pasos anteriormente explicados:




Desde el código referenciaremos las librerías mediante:

#include <windows.h>
#include <gl/glut.h>

Cuando compilemos un programa que use la librería GLUT y stdlib.h (de VC nuevo como Visual Studio 2008) aparecerá el siguiente error:

error C2381: 'exit' : nueva definición; __declspec(noreturn) es diferente

Esto es debido a que algunas definiciones de stdlib.h han sido actualizadas. Para solucionarlo basta con modificar la línea 146 de glut.h:

extern _CRTIMP void __cdecl exit(int);

por:

extern _CRTIMP __declspec(noreturn) void __cdecl exit(int);


Así no aparecerán errores aunque sí algunas advertencias.

Con esto ya estaría configurado el entorno para desarrollar en Windows!

viernes, 4 de marzo de 2011

Configurar OpenGL y GLUT en Mac (XCode)

Configurar OpenGL y GLUT en Mac es muy sencillo :-) solo debemos seguir los siguientes pasos:

Vamos a utilizar las librerías de OpenGL de C++ (que viene intergradas con el OS) así que no usaremos Cocoa ni Objetive-C. El IDE que utilizaremos será XCode. Así que manos a la obra...

  1. Iniciamos XCode y creamos un nuevo proyecto como Mac Os X >> Aplicacion con el template de "Command line tool" y de tipo C++ stdc++.
  2. Desde el menú Project >> Add to project... buscamos las librerías de OpenGL y GLUT que se encuentran en /Sistema/Libreria/Frameworks/ y son OpenGL.framework y GLUT.framework respectivamente.
Con estos sencillos pasos ya tendríamos el entorno preparado para empezar a desarrollar, así de fácil!

Os dejo este video explicando los pasos anteriores.



Para más información visitar la página de desarrollador de Apple.

miércoles, 2 de marzo de 2011

OpenGL basics: el comienzo de todo (II)

El modelo de ejecución de OpenGL es Cliente-Servidor. Una aplicación (el cliente) manda comandos que son interpretados y procesados por OpenGL (el servidor local o remoto). Este servidor puede tener varios contextos (Gl contexts).
A continuación vamos a ver como trabaja el servidor de OpenGL y como este proceso es realizado por una pipeline gráfica o máquina de estados.
Pipeline en OpenGL
En este diagrama se puede ver el pipeline. Los comandos entrarían por la izquierda.
  1. En primer lugar en vez de lanzar todos los comandos por el pipeline se pueden acumular en el display list para procesarlos más tarde y de manera transaccional.
  2. La fase del evaluator permite la evaluación de curvas y superficies. Esto permite crear superficies solo usando puntos de control.
  3. Durante la fase per-vetex operations and primitive assembly, OpenGL procesa todas las primitivas que son transformadas y alumbradas. Además las primitivas son “clipeadas” por el viewport (esto no es mas que la geometría que quede oculta será filtrada y no se enviará a renderizar).
  4. La rasterización es el proceso que permite mostrar gráficos con formas 3D en la pantalla.
  5. Después de todo esto en la última fase per-fragment operations que se realizan las últimas operaciones en los datos antes de ser enviados al “frame buffer”. Estas operaciones incluyen actualizaciones condicionales del “frame buffer” basadas en valores para realizar z-buffering, blending o enmascaramiento entre otras operaciones lógicas sobre pixels.
En este punto conviene remarcar que los comandos aplicados sobre el “frame buffer” son controlados por el sistema de ventanas que es el que asigna los recursos del “frame buffer”. No hay comandos de OpenGL para configurar el “frame buffer”. Esta configuración se realiza fuera de OpenGL, de hecho la propia inicialización de OpenGL se realiza cuando el sistema de ventanas asigna una ventana para que OpenGL pueda renderizar. Existe una extensión de OpenGL llamada GLX, que proporciona una interfaz para comunicarse con las X. Yo personalmente utilizo GLUT que permite crear callbacks para manejar ventanas y los eventos de input del usuario (esto lo veremos más adelante).

* Por último, comentar que los datos de entrada pueden venir en forma de pixeles en vez de vértices, como por ejemplo una imagen para mapear una textura, se saltan la primera fase del procesado. El resultado en este caso es guardado en la “memory texture” para usarse en la fase de la rasterización, o rasterizarse y los fragmentos resultantes mezclarse en el “frame buffer” si son generados desde datos geométricos.  

martes, 1 de marzo de 2011

OpenGL basics: el comienzo de todo (I)


Por mi experiencia, muchos programadores de gráficos utilizan las APIs gráficas como si fueran una “caja negra”.
Esto es bueno en un primer momento porque obtienes unos buenos resultados de una manera rápida pero tiene la contrapartida de que cuando se quiere profundizar en el uso de estas librerías no se tiene la base necesaria para ello. Además de que es posible que surjan errores fácilmente evitables.
Después de esta charla de “abuelo cebolleta” :-) pasemos a lo interesante.

OpenGL es una API que permite abstraerse del hardware de gráficos. Una aplicación que use OpenGL por una parte pintará primitivas, por otra seteará diversos comandos.
  • Las primitivas son definidas como un conjunto de uno o mas vértices. Los datos (coordenadas, colores, normales, coord. de texturas,...) están asociados a los vértices.
  • Los comandos son procesados en el orden en que son mandados además es muy importante el hecho de que OpenGL no pintará una primitiva hasta que reciba todos los comandos asociados. Veremos más adelante como estos comandos alterarán la sencilla máquina de estados por la que está formada OpenGL :-).

domingo, 27 de febrero de 2011

Bienvenido a gamer development!

Hola! He creado este blog para escribir todas mis experiencias en el desarrollo de videojuegos. Todo lo que voy aprendiendo sobre este tema y que creo que puede ser útil lo iré compartiendo por aquí.
Siéntete libre para comentar cualquiera de los contenidos de este blog :-)
Guybrush Threepwood. Monkey Island 2