Test de mi gameEngine en C++

Todo aquello que no está relacionado con Gemix Studio ni con la programación DIV en general.

Re: Test de mi gameEngine en C++

Postby Hokuto7 » Sat Feb 02, 2019 11:26 pm

He realizado algunas pruebas mas para confirmarlo definitivamente.

Si tengo la ventana minimizada se escucha regular pero si tengo la ventana maximizada aquello es un destrozo,tambien lo he probado a 30 fps y mejora un poco pero sigue dando problemas y estamos hablando de una aplicaion super simple,imaginate un juego completo,aquello puede ser la destruccion del mundo y si encima lo pongo a pantalla completa ni me lo imagino. :blind:

Pero he realizado otra prueba para confirmar si el problema venia de tu libreria o de raylib,y he probado algunos juegos completos que trae raylib y solo funciona uno que se llama "drturtle" y el mismo problema con la musica pero aqui es peor porque cuando empieza el juego no solo se ralentiza la musica si no que... tambien se ralentiza el juego y eso que el juego no es nada del otro mundo,se mueve el scroll como a trozos,si has jugado algun juego de naves en el msx sabras a lo que me refiero.

Esto confirma que la libreria raylib esta optimizada como el culo,pero esto no es tu culpa es del creador de raylib.

Otro cosa que queria comentarte es que no puedes decirle a la gente que si le falta algo a tu libreria pues que busque una libreria por su cuenta y aprenda a enlazarla y utilizarla,porque la gente que quiere utilizar tu libreria o otra ,solo quiere hacer juegos y no ponerse a buscar otras librerias para usarlas en la tuya,para eso prefiero utilizar yo directamente sdl y sdl_mixer y termino antes,pero te lo digo desde el buen rollo,no te molestes. ;)
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Test de mi gameEngine en C++

Postby erkosone » Sun Feb 03, 2019 1:07 am

no me molesto hombre.. pero vamos que puedes usar SDL_mixer con mi lib jeje.. no hay ninguna diferencia a usarla en otro proyecto.

Yo por mi parte estoy buscando la mejor alternativa para la libreria de red.. estoy entre varias librerias... llevo toda la tarde y lo que ha pasado de noche con una libreria basada en el standa OSC y bueno.. no me termina de gustar la complejidad del codigo resultante.. realmente quiero que sea estilo Div todo esto.. no me gusta usar complejas nomenclaturas..
Ahora voy a centrarme un par o tres de horas mas en la winsock2 para windows.. que al final si compilo con scriptem me da igual que la lib no sea multiplataforma.. compila y punto jeje.. o eso creo.

Sobre el audio.. pues buscaré alguna libreria sencilla para añadir al proyecto, haber que encuentro, openAL me parece un buen punto de partida.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Test de mi gameEngine en C++

Postby OskarG » Sun Feb 03, 2019 1:09 pm

Hola erkos me he molestado en saber por que falla el sonido...
Ya se lo que pasa XD
ES LA IMPLEMENTACION QUE HAS REALIZADO Y ESTA MAL HECHA:
HE bajado la version de raylid y ejecutado este codigo
Code: Select all
/*******************************************************************************************
*
*   raylib [audio] example - Module playing (streaming)
*
*   NOTE: This example requires OpenAL Soft library installed
*
*   This example has been created using raylib 1.5 (www.raylib.com)
*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
*   Copyright (c) 2016 Ramon Santamaria (@raysan5)
*
********************************************************************************************/

#include "raylib.h"

#define MAX_CIRCLES  64

typedef struct {
    Vector2 position;
    float radius;
    float alpha;
    float speed;
    Color color;
} CircleWave;

int main()
{
    // Initialization
    //--------------------------------------------------------------------------------------
    int screenWidth = 800;
    int screenHeight = 450;

    SetConfigFlags(FLAG_MSAA_4X_HINT);      // NOTE: Try to enable MSAA 4X
   
    InitWindow(screenWidth, screenHeight, "raylib [audio] example - module playing (streaming)");

    InitAudioDevice();              // Initialize audio device
   
    Color colors[14] = { ORANGE, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK,
                         YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE };
   
    // Creates ome circles for visual effect
    CircleWave circles[MAX_CIRCLES];
   
    for (int i = MAX_CIRCLES - 1; i >= 0; i--)
    {
        circles[i].alpha = 0.0f;
        circles[i].radius = GetRandomValue(10, 40);
        circles[i].position.x = GetRandomValue(circles[i].radius, screenWidth - circles[i].radius);
        circles[i].position.y = GetRandomValue(circles[i].radius, screenHeight - circles[i].radius);
        circles[i].speed = (float)GetRandomValue(1, 100)/20000.0f;
        circles[i].color = colors[GetRandomValue(0, 13)];
    }

    Music xm = LoadMusicStream("resources/mini1111.xm");
   
    PlayMusicStream(xm);

    float timePlayed = 0.0f;
    bool pause = false;

    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second
    //--------------------------------------------------------------------------------------

    // Main game loop
    while (!WindowShouldClose())    // Detect window close button or ESC key
    {
        // Update
        //----------------------------------------------------------------------------------
        UpdateMusicStream(xm);        // Update music buffer with new stream data
       
        // Restart music playing (stop and play)
        if (IsKeyPressed(KEY_SPACE))
        {
            StopMusicStream(xm);
            PlayMusicStream(xm);
        }
       
        // Pause/Resume music playing
        if (IsKeyPressed(KEY_P))
        {
            pause = !pause;
           
            if (pause) PauseMusicStream(xm);
            else ResumeMusicStream(xm);
        }
       
        // Get timePlayed scaled to bar dimensions
        timePlayed = GetMusicTimePlayed(xm)/GetMusicTimeLength(xm)*(screenWidth - 40);
       
        // Color circles animation
        for (int i = MAX_CIRCLES - 1; (i >= 0) && !pause; i--)
        {
            circles[i].alpha += circles[i].speed;
            circles[i].radius += circles[i].speed*10.0f;
           
            if (circles[i].alpha > 1.0f) circles[i].speed *= -1;
           
            if (circles[i].alpha <= 0.0f)
            {
                circles[i].alpha = 0.0f;
                circles[i].radius = GetRandomValue(10, 40);
                circles[i].position.x = GetRandomValue(circles[i].radius, screenWidth - circles[i].radius);
                circles[i].position.y = GetRandomValue(circles[i].radius, screenHeight - circles[i].radius);
                circles[i].color = colors[GetRandomValue(0, 13)];
                circles[i].speed = (float)GetRandomValue(1, 100)/20000.0f;
            }
        }
        //----------------------------------------------------------------------------------

        // Draw
        //----------------------------------------------------------------------------------
        BeginDrawing();

            ClearBackground(RAYWHITE);
           
            for (int i = MAX_CIRCLES - 1; i >= 0; i--)
            {
                DrawCircleV(circles[i].position, circles[i].radius, Fade(circles[i].color, circles[i].alpha));
            }
           
            // Draw time bar
            DrawRectangle(20, screenHeight - 20 - 12, screenWidth - 40, 12, LIGHTGRAY);
            DrawRectangle(20, screenHeight - 20 - 12, (int)timePlayed, 12, MAROON);
            DrawRectangleLines(20, screenHeight - 20 - 12, screenWidth - 40, 12, GRAY);

        EndDrawing();
        //----------------------------------------------------------------------------------
    }

    // De-Initialization
    //--------------------------------------------------------------------------------------
    UnloadMusicStream(xm);          // Unload music stream buffers from RAM
   
    CloseAudioDevice();     // Close audio device (music streaming is automatically stopped)

    CloseWindow();          // Close window and OpenGL context
    //--------------------------------------------------------------------------------------

    return 0;
}



FUNCIONA PERFECTO....
probando con tu libreria...es cuando se distorsiona de narices la musica y suena con eco y rallada,No es problema de resolucion,de procesos pues los he anulado y puesto una resolucion infima,es como has implementado tu libreria y hay algo donde has cometido sin querer un bug.....la libreria original del creador me va fina en todos los sentidos,la tuya,en el tema de reproduccion de sonido,es imposible utilizarla.NO es problema por consiguiente del ordenador,tienes algun bug que no sabes donde lo has creado.
User avatar
OskarG
 
Posts: 612
Joined: Tue Jan 12, 2010 2:12 am

Re: Test de mi gameEngine en C++

Postby OskarG » Sun Feb 03, 2019 1:16 pm

Me imagino que la raylib.h la has modificado y si la has modificado ahi radica el problema,pues solo he hecho un copy paste del codifo fuente del ejemplo y si la ejecuto del original va bien,pero si la ejecuto con el tuyo va mal.......
User avatar
OskarG
 
Posts: 612
Joined: Tue Jan 12, 2010 2:12 am

Re: Test de mi gameEngine en C++

Postby Hokuto7 » Sun Feb 03, 2019 3:24 pm

Mas pruebas y coincido con OscarG.

He probado el ejemplo drturtle de raylib en tu libreria y estaba viendo los fps,si lo pongo a 60 me baja hasta 24 y si lo pongo en 30 se queda estable en 29 pero el sonido esta rayado siempre.

Pero como queria asegurarme bien me he instalado la version que tengo de raylib 2.0 y he probado el ejemplo drturtle y a 60 fps me baja hasta 38 y si lo pongo a 30 me va estable a 29 pero esta vez la musica me va casi perfecta,solo se distorciona muy rara vez en 60 fps pero en momentos puntuales y casi no se nota y en 30 se queda perfecta.

Conclusion,has implementado mal el sonido y si lo has hecho con el sonido puede que tambien con los procesos,aunquer tambien es verdad que raylib necesita una tarjeta acelerado para funcionar bien o un ordenador mas actual,creo que pide demasiado.

Si no recuerdo mal me dijistes que estabas usando una version mas nueva de raylib que te paso el creador,puede que tenga algunos bug.

Por cierto he mirado openAL y sdl_mixer y no he encontrado casi nada de tutoriales y lo que trae es el archivo "dll" y yo tengo que pasarlo a ".h" para enlazarlo y no tengo ni idea de como se hace,tambien he mirado un poco por encima como se programa con sdl_mixer y me parece un rollo.
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Test de mi gameEngine en C++

Postby Hokuto7 » Sun Feb 03, 2019 3:38 pm

He probado el ejemplo que comenta OscarG y en tu libreria se escucha mal como siempre y esta todo distorsionado y ralentizado.

Pero lo he probado en la version que me he instalado de raylib y funciona perfecto y a 60 fps.
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Test de mi gameEngine en C++

Postby erkosone » Mon Feb 04, 2019 5:20 am

Gracias por probarlo gente, por partes:

Primero, yo no he implementado el sonido jeje.. el modulo de sonido es el que trae raylib ya implementado, yo solo he hecho el wrapper que enlaza a las funciones de sonido como si fuera estilo Div, osea esto:

El ciclo de vida de una musica cuando se ha hecho un playMusic()..
Source Code (C++) [ Download ] [ Hide ]
  • // MUSIC CYCLE CONTROLLER..
  •                     if(_music_play_){
  •                         _music_time_played_ = GetMusicTimePlayed(_music_play_id_);
  •                         UpdateMusicStream(_music_play_id_);        // Update music buffer with new stream data
  •                         int a = _music_time_played_*100;
  •                         int b = _music_time_length_*100;
  •                         if(a == b){
  •                             if(_music_repeat_){
  •                                 StopMusicStream(_music_play_id_);
  •                                 PlayMusicStream(_music_play_id_);
  •                             }else{
  •                                 StopMusicStream(_music_play_id_);
  •                                 _music_play_ = false;
  •                                 _music_play_id_ = 0;
  •                             }
  •                         }
  •                     }



Y estas son las funciones div style:
Source Code (C++) [ Download ] [ Hide ]
  • void playMusic(Music m){
  •     _music_play_id_ = m;
  •     PlayMusicStream(_music_play_id_);
  •     SetMusicVolume(m, _music_volume_);
  •     //SetMusicVolume(m, 1.0f);
  •     _music_play_ = true;
  •     _music_time_played_ = 0;
  •     _music_time_length_ = GetMusicTimeLength(m);
  • }
  • //------------------------------------------------------------------------------------------------------
  • void playMusic(Music m, float volume_){
  •     _music_play_id_ = m;
  •     PlayMusicStream(_music_play_id_);
  •     _music_volume_ = ((1.0f * volume_) / 255.0f);
  •     SetMusicVolume(m, _music_volume_);
  •     _music_play_ = true;
  •     _music_time_played_ = 0;
  •     _music_time_length_ = GetMusicTimeLength(m);
  • }
  • //------------------------------------------------------------------------------------------------------
  •  
  • //------------------------------------------------------------------------------------------------------
  • void stopMusic(){
  •     if(_music_play_){
  •         StopMusicStream(_music_play_id_);
  •         _music_play_ = false;
  •         _music_play_id_ = 0;
  •         _music_time_played_ = 0;
  •         _music_time_length_ = 0;
  •     }
  • }
  • //------------------------------------------------------------------------------------------------------
  • void setMusicVolume(Music m, float volume_){
  •     _music_volume_ = ((1.0f * volume_) / 255.0f);
  •     SetMusicVolume(m, _music_volume_);
  • }
  • //------------------------------------------------------------------------------------------------------
  • void setMusicRepeat(bool repeat){
  •     _music_repeat_ = repeat;
  • }
  • //------------------------------------------------------------------------------------------------------
  • void playSound(Sound s){
  •     PlaySound(s);
  • }
  • //------------------------------------------------------------------------------------------------------
  • void playSound(Sound s, float volume_){
  •     PlaySound(s);
  •     SetSoundVolume(s, ((1.0f * volume_) / 255.0f));
  • }
  • //------------------------------------------------------------------------------------------------------
  • void playSound(Sound s, float volume_, float pitch_){
  •     PlaySound(s);
  •     SetSoundVolume(s, ((1.0f * volume_) / 255.0f));
  •     SetSoundPitch(s, ((1.0f * pitch_) / 255.0f));
  • }


Como ves hokuto no hay ninguna implementación de sonido, solo un gestor de play/stop con unas cuantas funciones que simplifican las llamadas a mas bajo nivel :)

La versión que estoy usando de raylib es la 2.4dev que es la que está en desarrollo sin publicar oficialmente todavia.. esto si que puede ser el problema.. aunque a mi no me hace nada raro en ningun momento, es lo que me extraña, lo comentaré en el channel de discord haber que me dice ray.


Y por cierto jeje.. que tiene que ver el sonido con los procesos?
Sobre lo de que pide demasiado, bueno supongo que al no tener hardware minimo para juegos te da esa impresión, es bastante comprensible.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Test de mi gameEngine en C++

Postby OskarG » Mon Feb 04, 2019 8:46 am

Creo que no has comprendido lo que he expresado.simplemente he pasado los ejemplos originales de raylib 2.0 a tu proyecto en el npp y es cuando surgen los problemas...y no es cuestión de tener una máquina potente o tener cargado algún gráfico o de un scroll o el tamaño del juego ,es algo de tu proyecto que es diferente ,pues no utilizo las funciones nuevas que has incluido ...hay algo distinto en tu versión que he bajado que hace que la música no suene nada bien
User avatar
OskarG
 
Posts: 612
Joined: Tue Jan 12, 2010 2:12 am

Re: Test de mi gameEngine en C++

Postby Hokuto7 » Mon Feb 04, 2019 11:30 am

Opino lo mismo que OscarG,el sonido funciona bien en raylib y en tu libreria no.

Tu libreria funciona mas lenta que raylib,ya hice las pruebas y en raylib funciona al menos 14 fps mas rapido y lo de implementacion no tiene nada que ver con lo que yo he dicho,se que has encapsulado las funciones de raylib en las tuyas para que tenga un toque div pero hay puede que radique el problema.

Puede ser que al convertirlas en un vector para una carga mas completa produzca errores o puede que no estes limpiando bien los recursos o otra cosa.

Lo que he comentado de los procesos es por lo mismo de los sonidos,el sonido se ralentiza y si pasa esto los procesos puede que tambien,como te he dicho antes raylib funciona mas rapìdo que tu libreria.

Puede ser tambien que al crear tu librertia con c++ de problemas porque raylib esta programado con c,no se exactamente cual es el problema,pero haberlo hay.

Pasa por aqui la version limpia de raylib 2.4 que estas usando para hacer las pruebas y ver si da problemas esa libreria.Creo que no deberias de haber usado una version que no esta acabada.

Si a ti no te da problemas puede ser porque tu ordenador es mas actual y no se ralentiza,pero ya ves que a otras personas si no da problemas y solo con tu libreria.

Mi ordenador cumple los requisitos minimos de sobra,te recuerdo que hay muchos engines que me funciona perfectamente: -gamemaker8/studio,clickteam fusion 2,5,contruct classic/2,gdevelop,game editor,enigma dev,bennugd,gemix,divdx,stencyl,tilengine,love2d y muchos otros,incluso la versionn 4 de unity me funciona medianamente bien.

Sigo pensando que una libreria que no tiene ninguna interfaz visual y que todo es a pelo y encima esta programada con c pide demasiado,yo he probado tilengine que esta programado con c y va volando,tanto la version de c como los wrapper de python y basic.
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Test de mi gameEngine en C++

Postby erkosone » Mon Feb 04, 2019 2:19 pm

Vale, si entenderos os entiendo, la cosa es que no entendeis que mi "libreria" es en realidad la misma raylib ya que yo solo encapsulo, osea.. lo mio es un wrapper basicamente, no tiene absolutamente nada que ver, de eso estoy seguro.
Ya te adelanto que ray ha cambiado el modulo interno de sonido en la versión que tiene en desarrollo.. y que yo no uso la estable por que le faltaban muchas features importantes que se han añadido recientemente.

También os comento que raylib esta bastante mal enfocada respecto a los nombres usados en su core, ya que cuando intento añadir cualquier libreria que use windows.h directamente entran en conflicto muchisimos nombres de función.. una pena por que ray no parece entender que no deberia romper la compatibilidad con las cabeceras oficiales de windows jeje.. directamente me ha dicho "raylib es enemiga de windows.h" XD.. con esta frase ya me queda claro.. le da igual.

Que putada.. si no cambia de opinión en lo que a los nombres de función se refiere me veo obligado a abandonar esta libreria y entonces vuelta a empezar con libGDX o PIXI.JS que hace bastante tiempo que le tengo ganas.. un viejo divero llamado "CODEMASTER" ya la usaba hace años para su JDIV..

Bueno.. espero que recapacite en estos dias y adapte la libreria a windows decentemente.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

PreviousNext

Return to Offtopic

Who is online

Users browsing this forum: No registered users and 18 guests