Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Librería Básica Para Programar Videojuegos

Iniciado por sés, 28 de Septiembre de 2004, 09:57:27 AM

« anterior - próximo »

sés

 Últimamente, para cada cosa que hacía, "rehacía" estas funciones para adaptarlas al programa, y esta es, en gran parte, la causa de mi pereza a la hora de hacer cosas. El resto de la culpa la tiene el que me pase 8h programando y cuando llego a casa me da pereza :P

Pero bueno, he decidido hacer una librería en condiciones. Nada de un motor ni cosas por el estilo, una simple librería como las que tenía cuando me dedicaba más en serio a programar juegos. Bueno, no es realmente "hacer", más bien es adaptar mis viejas rutinillas.

En alguna ocasión he dicho que uso SDL, DirectX o lo que sea simplemente para poner el modo de video y uso mis propias funciones de dibujo.
Como creo recordar que algunos más hacen lo mismo que yo y aprovechando que voy a adaptar mis viejas funciones, he pensado en hacerlo de forma que cualquiera que haga como yo la pueda utilizar.

Lo que he pensado es en hacerlo por capas y utilizar las que se necesiten.

La primera capa que voy a hacer (ya casi la tengo) es la más sencilla y básica: BGL (Basic Game Library)
Esta capa intenta ser multiplataforma y se limita justo a lo que utilizo yo de cada librería (poner el modo de vídeo) y lo específico de cada SO (en principio solo eventos de teclado y ratón y poco más), de tal forma que el esqueleto de un programa sería algo así:
#include "bgl.h"

int main( int argc, char **argv )
{
  bgl_event event;
  bgl_bool done = bgl_false;

  bgl_setvideomode( 640, 480, 32, bgl_true );  // 640x480x32 pantalla completa

  do {
     if( bgl_readevent( &event ) ) {
        switch( event->type ) {
           case BGL_EVENT_APPCLOSE:
               done = bgl_true;
               break;
        }
     }
  } while( !done );

  return 0;
}


Al fin y al cabo esto es más o menos lo que yo hago con SDL :P

Estoy pensando que se pueda elegir también si se quiere este tipo de funcionamiento o el típico de DOS (¡fuera eventos! (twist)).

Me ahorro el utilizar una librería de la que solo uso 3 funciones y el tener que incluir una DLL.

No sé si habrá alguien a quién le interese, de momento lo estoy haciendo para mí hasta que esté más o menos estable.

Una vez que termine esta parte (de momento solo para Windows), me pondré a pasar mis funciones gráficas que funcionarán sobre esta. Cuando esté esa segunda capa, se podrá añadir cualquier cosa sobre ellas.

Si hay alguien interesado o que quiera dar alguna idea...
Soy indeciso... ¿o no?

ethernet

 Por qué no haces esa capa "base" con SDL y te centras en las capas de nivel superior? quizás esa un wraper de SDL eso que has puesto.
qué funciones de alto nivel tienes pensado implementar?



saludos

sés

 Hombre.. la cosa está en que yo ni uso ni quiero las funcionalidades de SDL, solo la utilizaba para  poner modo de video y obtener el puntero a la superficie.

Trato de hacer justamente eso. La idea es que haga lo mínimo que te haga olvidarte del SO:
- Poner modo de video.
- Obtener el puntero.
- Leer eventos (ratón, teclado, etc.).

Con eso ya puede hacer por encima prácticamente cualquier cosa olvidándote del SO.

El resto de funcionalidades serían pequeños añadidos a la librería base (timer, threads...), pero son cosas que normalemente, al menos yo, no uso.

De momento solo tengo pensado hacer lo que ya he dicho, las funciones gráficas.

Y de alto nivel... pues... lo único es un GUI sencillito, pero más adelante.

Resumo lo que tengo pensado:

BGL: Librería básica (poner modo de video, obtener puntero y evento básicos).
BGL Video: Funciones gráficas sobre BGL.
BGL GUI: Sobre BGL Video (para más adelante).
BLG Timer, BGL Thread, etc.: Sobre BGL. De momento ni me las he planteado ya que prácticamente no uso nada de eso.

La idea, repito, es que sea realmente básico y simple (La "S" de SDL es de Simple y termina haciendo un poco de todo).
Así, si alguien solo quiere la base y usar sus propias funciones gráficas no tiene porqué "tragar" con todo.

Otra cosa, aunque en principio está pensado para 2D, intentaré dejarlo abierto para que se pueda hacer una capa de Open GL.
Soy indeciso... ¿o no?

[EX3]

 Tiene muy buena pinta la idea sés y estoy seguro ke a mas de uno le sera la mar de util a la hora de desarrollar su juego, ya ke te ahorras tener ke programarte un api para el juego. Animo con ello  (ole)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

seryu

 cualqier libreria sera siempre bien recibida, aunque no estoy de acuerdo en lo que dices de sdl, puesto que los timer son fundamentales para lograr una velocidad similar en todo tipo de cpus, y los sdlrect fill etc, agilizan mucho el dibujado, pese a qe yo cuando he portado de msdos a win/lnx he usado un simple update y el lock en sdl surface para pintar por punteros como toda la vida.

y no olvidemos el sonido!

sés

 
Cita de: "seryu"...aunque no estoy de acuerdo en lo que dices de sdl, puesto que los timer son fundamentales para lograr una velocidad similar en todo tipo de cpus...
Bueno, yo me refería a los timers en el sentido de "función que se llama cada cierto tiempo". Está claro que un timeGetTime() es necesario.

Cita de: "seryu"...los sdlrect fill etc, agilizan mucho el dibujado
Sí, pero la idea es "básica", si la base tiene esas cosas, deja de ser basíca, ¿no?

Cita de: "seryu"...pese a qe yo cuando he portado de msdos a win/lnx he usado un simple update y el lock en sdl surface para pintar por punteros como toda la vida.
Ahí lo tienes :P, por eso precisamente estoy haciendo esto. Tú usarías la base y tus funciones gráficas y eso es justo como lo estoy planteando.

Cita de: "seryu"y no olvidemos el sonido!
No olvido nada, pero de momento ni me lo planteo. Además, siempre puedes usar una librería externa de sonido como FMOD. La idea es que no tengas que atarte a ninguna librería. Si algún día yo o alguien hace una BGL Sound... estupendo :)
Soy indeciso... ¿o no?

shephiroth

 Buenas.

Puede que peque de novato, pero no me gusta mucho la idea y voy a intentar de explicarme.

La idea que tienes de hacer una librería que haga los más básico puede ser interesante.....pero a largo plazo una bomba de relojería. Tu imaginate que pasan los meses y terminas esas capas básicas que planteas. Cuando las tengas terminadas y seguramente por peticion de mucha gente, o simplemente porque te apetece en ese momento, le empezarías a incluir modulos no tan básicos y la idea original se perdería.

Porque no se en que pelicula fue que dijeron, "porque me voy a conformar con esto, si puedo hacer mas con más calidad en el doble de tiempo?".

Editado:
Además, me parece que reinventas la rueda. Tu mismo dices que utilizas SDL para iniciar video y luego usas tus rutinas.......habra gente que utilice la rutinas de SDL, igual q tu utilizarías las de BGL.........pero tambien habrá gente que no utilice las rutinas de BGL y les pasará lo mismo que a ti con SDL.........ademas, que mas te da iniciar video con SDL que con BGL??? Igualmente tu programa "arrastrará" sdl.dll o bgl.dll

Bueno, de todos modos, si decides continuar te deseo toda la suerte del mundo  (ole)

sés

 Por partes...

Aunque alguien (o yo mismo) diga "estaría bien añadir tal o cual cosa", solo sería eso un añadido, un módulo externo a la base. La base se mantendría siempre igual salvo alguna cosa que se pueda ver más adelante que sí que haga falta que esté ahí.

Por muchos módulos que se hagan, la idea sigue ahí. De hecho la idea es precisamente esa.

Sí, yo mismo utilizo SDL para poner el modo de video, los eventos y tal. Por eso mismo hago esto, porque no necesito (ni quiero) tener todo lo demás que viene en el paquete. ¿Para qué quiero tener un DLL con cientos de funciones si solo quiero unas pocas? (y que creo que anda por las 200Kb)

No me parece que sea reinventar la rueda. SDL me "obliga" a tragar con su DLL, me guste o no, use todo lo que tiene o no. Lo que consigo con BGL no me lo da SDL ni niguna librería que conozca

Si alguien sí que usa las funciones gráficas (y otras) de SDL, ¿cuál es el problema? Que use SDL.

BGL no está pensado para arrastrar ninguna DLL, está pensada como librería estática. Y aunque arrastrara una DLL... ejem... no es lo mismo unas 200Kb que.. no sé... ¿10Kb? ¿20Kb? Ni idea, no lo he probado. Puedo decir que el ejecutable de pruebas que tengo ocupa unas 30Kb

En SDL tienes lo que hay y punto. Vale... puedes coger los fuentes y quedarte con lo que quieres, pero dos cosas:
- ¿Eso es "legal"? Supongo que sí, pero no sé hasta que punto se permite, no he visto la licencia.
- ¿Has visto el fuente de SDL? Es una librería tan completita y compleja que no hay dios que le meta mano sin estudiar a fondo toda la estructura.

La ventaja y la razón por la que la voy a hacer es que, con BGL, solo usas lo que necesites, nada más.

Otra cosa, que no sé si lo dije o no: Nunca pensé esto en plan librería para uso público.
En principio lo pensé para mí, pero como creo que a algunos les puede interesar lo puse aquí para que quien quiera dé ideas y opiniones.
Evidentemente, si alguien quiere todo junto, seguramente usará SDL y listo. Mi idea va para los hacen como yo y quieren usar sus propias funciones (gráficas o lo que sea)... o para los que SDL no les convezca o simplemente quieran probar otra librería.
Soy indeciso... ¿o no?

seryu

 SDL es lgpl asi que si se puede.. si das el fuente modificado de sdl.






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.