¿Olvidates tu contraseña?

GO-Engine

Inicio Foros Desarrollo Proyectos GO-Engine

  • Imagen de perfil de WikitiWikiti
    Participante
    #45530

    GO-Engine

    Lee la ficha del proyecto en: http://www.zehngames.com/proyectos/go-engine/

    • Este debate fue modificado hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Este debate fue modificado hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Este debate fue modificado hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Este debate fue modificado hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Este debate fue modificado hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Este debate fue modificado hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Este debate fue modificado hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Este debate fue modificado hace 2 años, 9 meses por Imagen de perfil de Wikiti Wikiti.
    Imagen de perfil de J. LadisJ. Ladis
    Jefe de claves
    #45577

    Me parece un proyecto realmente interesante y el vídeo pinta muy bien. Yo personalmente y como parte de mi Trabajo Fin de Grado estoy desarrollando un motor de juegos también, basado en componentes (uso Artemis-Cpp) y orientado tanto a 2D como a 3D (si bien la parte de OpenGL aun le queda bastante trabajo). Sin conocer cómo va vuestro proyecto o los problemas que os habéis encontrado no sé en qué puedo ayudaros (más con consejos etc, porque de tiempo tengo poco), pero puedo decirte algunas características que tiene mi motor por si alguna os interesa y puedo informaros de cómo lo he hecho yo.

    Quantum Engine está programado en C++ usando como compilador CMake, lo cual permite que sea un motor multiplataforma con soporte para Windows, Linux y Mac, funcionando en las tres plataformas sin cambio alguno en el código. Lleva también un gestor de recursos que se encarga de gestionar y abstraer los assets usados, de forma que el usuario solo tiene que pedir “Quiero esta imagen” y el gestor ya se encarga de crear el objeto, reservar la memoria o simplemente devolver la referencia porque ya esté cargado en memoria, evitando así duplicidades, a la vez que permitiendo que un asset que lleve sin usarse X tiempo sea desalojado de memoria. El scripting va a través de lua, aunque por ahora está bastante verde al menos puedo ejecutar archivos .lua desde C++ y viceversa. Los assets vienen configurados a través de archivos JSON, de forma que el código en C++ al cargar un assets sea el menor posible y las propiedades quedan definidas en archivos de texto, sin necesidad de re-compilar el juego por pequeños cambios en los assets.

    Si queréis echar un vistazo al código está todo en GitHub, tanto el motor aquí https://github.com/L4D15/Quantum-Engine como un pequeño ejemplo de cómo incluir el motor en un nuevo proyecto aquí https://github.com/L4D15/Quantum .

    Imagen de perfil de WikitiWikiti
    Participante
    #45585

    Vaya, lo del gestor de assets parece una idea bastante buena. En nuestro caso, hemos decidido tirar por una carga simple a partir de un fichero de recursos. Se cargan los necesarios al principio del nivel y no perdemos tiempo en carga y descarga de ficheros. Pero la verdad, si se consiguen hacer cargas y descargas de manera dinámica sin que influya mucho en la ejecución (como hacen los juegos modernos, cargando primero modelos o texturas de baja calidad, como un LOD’s) en nuestro motor, sería algo cojonudo. Me lo apunto para un futuro 🙂

    Y sobre el scripting, en un principio estuve haciendo pruebas con Boost.Python y LuaBind para intentar empotrar código de Python o Lua en el motor. El único problema es que, tras mucho pelear, no se me ocurría manera alguna de exponer las estructuras de datos principales (los **sistemas**, básicamente) al lenguaje de script, por lo que no se podía hacer gran cosa. Tal vez, en un futuro, consiga darle caña y manejarme mejor con empotrados como este.

    Muchas gracias por el comentario y las referencias. Un Saludo.

    Imagen de perfil de J. LadisJ. Ladis
    Jefe de claves
    #45600

    Yo aun no he implementado esa parte, pero imagino que habrá que hacer una pequeña API que se pueda llamar desde lua o python, porque al menos en el caso de lua debes “registrar” las funciones que quieres poder llamar desde el archivo lua.

    Imagen de perfil de J. LadisJ. Ladis
    Jefe de claves
    #45639

    Por cierto, un problema que estoy teniendo yo es con la biblioteca que uso para parsear JSON, ya que JsonCpp funciona bien en Windows y Linux pero no en Mac, y Json-Spirit funciona bien en Linux y Mac pero no en Windows. El caso es que sé que lua se puede usar también para guardar datos de forma parecida a como lo hace JSON pero no encuentro por ninguna parte un tutorial o página que explique cómo hacerlo.

    Por ejemplo, para guardar la información de la animación de un sprite, en este caso
    Bonfire
    la imagen se acompaña de otro fichero ‘bonfire.json’ con lo siguiente:

    
    {
    	animations: [
    		{
    			name: Stand,
    			frames: 4,
    			oscillate: true,
    			frame-rate: 250
    		}
    	]
    

    Lo ideal sería deshacerme de las bibliotecas de JSON que me están dando problemas según la plataforma y usar lua para guardar y parsear esta información, pero como digo no encuentro información al respecto, solo confirmaciones de que se puede hacer. ¿Vosotros habéis hecho algo en este sentido?

    • Esta respuesta fue modificada hace 3 años, 6 meses por Imagen de perfil de J. Ladis J. Ladis.
    • Esta respuesta fue modificada hace 3 años, 6 meses por Imagen de perfil de J. Ladis J. Ladis.
    • Esta respuesta fue modificada hace 3 años, 6 meses por Imagen de perfil de J. Ladis J. Ladis.
    • Esta respuesta fue modificada hace 3 años, 6 meses por Imagen de perfil de J. Ladis J. Ladis. Razón: Borrar las comillas porque se descuadra todo. Gracias bbpress
    Imagen de perfil de WikitiWikiti
    Participante
    #45646

    En principio, no contemplamos animaciones. Pero para el caso de ese sprite, podrías guardar esa información (el fichero .json) en la cabecera de la imagen, creando así vuestro propio formato, parecido a como ha hecho VALVE para las texturas con animación, en los vtf (aunque no recuerdo si la parte de animación se guardaba en los vmt o en los vtf). Si fuese sólo el caso de la animación, no sería demasiado complicado. Si usas los .json para cualquier tipo de asset o recurso, creo que vas a necesitar usar un parser, como has descrito. ¿Has pensado en usar una librería sencilla, como de ficheros INI?

    • Esta respuesta fue modificada hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Esta respuesta fue modificada hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    Imagen de perfil de J. LadisJ. Ladis
    Jefe de claves
    #45659

    La idea es usar los JSON para guardar información sobre cualquier tipo de asset, de ahí que use una biblioteca para hacer el parser, en este caso he probado JsonCpp y Json Spirit, pero el problema es que JsonCpp da problemas de compilación en Mac y pasan de darle soporte, y Json Spirit da problemas de compilación en Windows (aparte de necesitar la biblioteca Boost de C++ que tampoco es fácil de instalar). La solución que estaba planteando es pasar de JSON y usar lua que sí funciona perfectamente en los tres sistemas, ya que he leído que se puede guardar información en archivos .lua de la misma forma que estoy haciendo con JSON (cambiando el formato, claro) pero no encuentro ningún ejemplo, tutorial ni guía que explique mínimamente cómo hacerlo. De ahí mi pregunta sobre si, ya que usáis lua, habíais tocado algo relacionado con eso.

    Imagen de perfil de WikitiWikiti
    Participante
    #45660

    En nuestro caso, no trabajamos demasiado sobre las librerías de Lua como para darte una respuesta clara. Aun así, indagando un poco por internet, he encontrado este artículo sobre el motor Allacrost, que tal vez pueda servirte de ayuda.

    Si no te he entendido mal, para el caso de Lua, quieres exponer las tablas del lenguaje a tu código de C++, para poder acceder a variables que haya dentro, como si fuese:

     
    LuaScript script1 = LuaManager.OpenScript(scripts/myscript.lua); // Inventado
    auto nombre = script1.getTable(animations).getStringAttrib(name);       // Vuelto a inventar
    

    En el artículo descrito al principio, veo algunos de obtención de variables a partir de tablas. Si es el caso, y de nuevo, no te he entendido mal, tal vez indagando en su código fuente puedas hacerte una idea de como hacer lo que quieres hacer.

    Un saludo.

    • Esta respuesta fue modificada hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Esta respuesta fue modificada hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti.
    • Esta respuesta fue modificada hace 3 años, 6 meses por Imagen de perfil de Wikiti Wikiti. Razón: Imposible colocar comillas
    Imagen de perfil de J. LadisJ. Ladis
    Jefe de claves
    #45667

    Le echaré un vistazo, seguro que me sirve de ayuda. ¡Muchas gracias! Si necesitáis lo que sea ya sabéis, por aquí me tenéis 😉

    Imagen de perfil de r2d2rigor2d2rigo
    Participante
    #46046

    Sobre el cacheo de assets tened cuidado porque es un arma de doble filo. Nosotros en Wave despues de darle bastantes vueltas decidimos hacer como en XNA, contenedores que pueden cargar assets individualmente pero que solo permiten liberar el conjunto completo. Esto es asi para evitar dejar referencias huerfanas (aunque con un reference counter se podria implementar si hay referencia fuerte entre objeto y asset) y para enfocarlo todo a dividir el juego en escenas y que cada una use su contenedor independiente.

Viendo 10 publicaciones - del 1 al 10 (de un total de 13)

Debes estar registrado para responder a este debate.