Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





New Game (librerías si o librerías no)

Iniciado por Buffon, 09 de Agosto de 2008, 01:53:13 PM

« anterior - próximo »

Buffon

Buenas tios, estoy haciendo el MMO definitivo !!!!

fuera coñas xD

empiezo: buenas tios,

Estoy haciendo un minijuego para probar cosas, en concreto un Arkanoid y he comenzado a hacerlo con Visual Studio 2008 con un colega que se ha apuntado este año al Master de la UPF.

El comienzo del juego, al ser un arkanoid y ser pequeñito no tiene mucha complejidad, lo cuál aprovecho para programar cosas algo más difíciles y así aprender un poquito más jeje.

Cómo está pensado el proyecto en VS2008

Empecé con un proyecto, del cuál cuelgan dos más, el juego en sí y una DLL que hará de motor del juego.

mi_proyecto
     * juegoArkanoid
     * minimotor


dado que es un juego tan pequeño seguramente no debería haber utilizado esta metodología pero la cosa es aprender bien desde los fundamentos, ya tengo mucha parte avanzada y en Windows ya se puede jugar, esta parte era muy sencilla, aquí ahora pongo la pregunta.

Dónde tienes el problema Buffon?

Pues quiero aprender a hacer las cosas pero en MAC OS X, no en Windows, quiero saber si la metodologia de DYLIB + APP es la correcta y si no me equivoco al elegir con XCode un proyecto Carbon dynamic library o si para estos casos sería mas conveniente crearme mi makefile para hacer la dylib.

Si estoy en lo cierto y merece la pena hacer estructurarlo de esta manera cual debería ser la forma, crear un primer proyecto con XCode para la dylib y luego crear un nuevo proyecto que lo utilice a modo framework ? Es más recomendable hacer directamente un Framework en vez de una dylib (quizá aquí metí la pata).

Alguien me inspira un poco que le estoy metiendo caña al MBP estas vacaciones mientras no bebo sidra ! xD

Zaelsius

Mi opinión sería que no te molestases en mantener una DLL/dylib, y que compilases tu framework estáticamente tanto en Windows como en Mac OS X.

Buffon

Cita de: "ZaelSiuS"Mi opinión sería que no te molestases en mantener una DLL/dylib, y que compilases tu framework estáticamente tanto en Windows como en Mac OS X.

Esta claro que cuando me pongo con un proyecto grande en Windows hago locuras :P pero quiero aprender a hacerlo en MAC OS X, básicamente por que si me pongo a hacer algo de física prefiero tenerlo en un proyecto a parte y poderlo reutilizar, o si hago un cambio sobre una de las DLLs no tener que reenviar todo el ejecutable.

Por lo menos cuando hacemos un proyecto en la empresa solemos modularlo lo máximo posible para cuando haya que corregir bugs.

Otra de las cosas por las que quiero particionarlo es la siguiente:

De momento lo tengo así estructurado:


minimotor
   Scene
   SceneRender
   Object


Object
Objeto base que define funciones de forma virtual como paint, etc...

Scene
Se encarga de estructurar los objetos del juego de forma eficiente a la hora de pintado y cálculo de colisiones.

Actualmente tengo implementado un quadtree para colisiones dado que lo voy a pintar todo.

SceneRender
Es el encargado de pintar la escena, cada uno de los objetos tiene su propio método paint, aún así aquí se implementa algo de GLSL o sólo se pinta lo necesario.

Hay más clases, como mmBBox, mmPosition, mmColor, etc que depende si compilo en windows o mac os x posiblemente utilizaré una cosa u otra y hacen de wrapper, los famosos ifdef endif :)

Luego en el juego tengo lo siguiente


juegoArkanoid : utiliza minimotor
   * heredan de Object
         <- Drawable_Object
   * heredan de Drawable_Object
         <- Jugador
         <- Ladrillo
         <- Pelota
   * heredan de Scene
         <- inGameScene
   no heredo de SceneRender pues ya me sirve el código.


Jugador
Tiene funcionalidades adicionales para el movimiento horizontal.

Ladrillo
Puede tener una dureza que necesitará de varios golpes para ser eliminado.

Pelota
Tiene una dirección y una velocidad.

Como heredan todos de Object los trato como una unidad dentro del motor así si un día decido cambiar la forma de trabajar de Scene y en vez de utilizar guardo una lista de Objetos y hago una iteración para calcular colisiones sólo tengo que redistribuir la DLL en Windows, cosa que me gustaría hacer en MacOSX también.

Los que habeis hecho juegos para MAC habeis compilado todo estático y tener una fuente de muuuuchos megas ?

davur

Coincido con la opinión de ZaelSiuS.

Personalmente, creo que muy generalmente las librerías dinámicas no tienen un retorno de la inversión razonable/admisible. Porque muy generalmente se utilizan para solucionar un problema que realmente no existe.

Prompt

No compiles y uses librerias estáticas. Crea el proyecto, del app y la librería estática y en el IDE relacionalos, haz que APP dependa de BuffonLib. Al compilar estáticamente solo linkará con lo que uses.

No obtendrás muuuuuuuuuuuchos megas.

Para lo demás y bajo mi experiencia:


Solution:
- Core
- Objects
- Network
- Effects
- ...
-----------------
- Arkanoid [Core, Objects, Network, Effects, ...]
----------------
- Viewer [Arkanoid]


Se entiende, no?

Saludos!

Zaelsius

Por elaborar un poco mi opinión. En OS X cada aplicación suele estar auto contenida en un bundle, con su ejecutable, recursos, etc. Usar una DLL(dylib) no aporta ninguna ventaja ya que normalmente al actualizar una aplicación arrastras un nuevo bundle que sustituye al anterior. No sé si eres usuario de Mac..

En Windows yo evitaría también el uso de DLL a no ser que forzosamente te hiciese falta. Ten en cuenta que distribuir parches con todo el código ejecutable es más sencillo que distribuir parches con solo una DLL...  y hoy en día al usuario le da igual bajar 5MB que 500KB.

Ah, y evita abusar de #ifdef etc para la compilación condicional. Es mejor que separes las implementaciones de cada OS en distintos ficheros, y que en cada plataforma solo se compilen los necesarios.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.