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 erkosone » Tue Jan 15, 2019 8:39 pm

Si. Todo eso ya lo trae la raylib. No al estilo div claro .. pero puedes hacer lo que quieras.. ya he integrado el 3d con los procesos e incluso ya funcionan las colisiones en 3d jeje
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Test de mi gameEngine en C++

Postby erkosone » Fri Jan 18, 2019 9:46 pm

UPDATE IMPORTANTE!

Habia un bug grave en la creación de procesos con cuerpos estaticos, ahora se crean correctamente, lo he descubierto durante el desarrollo de un tutorial de juego de plataformas para publicar..
Habia un error durante la creación del shape interno.. este no era capaz de rotar antes de añadirse al mundo para posteriormente volverse estatico..

Ahora esta corregido, y aquí esta el ejemplo de juego de plataformas.. es un mini ejemplo para ver la potencia de la libreria usando sensores.. es una simplificación de las versiones anteriores que usaban isContact() que es una función demasiado compleja para lo que sirve en si misma.. ahora con los procesos a modo de sensor la cosa esta muchisimo mas cercana al estilo DIV original. :)

La verdad es que me siento muy comodo con esta forma de hacer las cosas.. si alguien descarga el ejemplo y lo prueba ya verá como funciona perfecto.. y mas simple no puede ser ;)

El archivo rar contiene la ultima versión de la libreria.. no actualizo el entorno todavía al completo por que en esta nueva entrega incluirá generador de fuentes estupendo, egui, y mucho contenido 3d además de un juego al estilo mario de la wii de estos que sale mario en sprites dentro de un mundo 3d.

Source Code (C++) [ Download ] [ Hide ]
  • #include "gameLibZero.cpp"
  • int ST = 0;
  • images img;
  • int type_plataforma;
  •  
  • void setup(){
  •     setMode(640, 400);
  •     setFps(60);
  •     fullscreen();
  •     loadImages("data/images", &img);
  •     setGravity(0, 0);
  • }
  • //------------------------------------------------------------------
  • class sensor:public process{
  •     public:
  •     int st = 0;
  •     bool toco_suelo = false;
  •     void frame(){
  •         switch(st){
  •             case 0:
  •                 {
  •                     graph = img[2];
  •                     visible = true;
  •                     x = father->x;
  •                     y = father->y;
  •                     createBody(TYPE_CIRCLE, METAL);
  •                     setSensor(true);
  •                     st = 10;
  •                 }
  •                 break;
  •             case 10:
  •                 {
  •                     x = father->x;
  •                     y = father->y;
  •                     translate(x,y+32);
  •                     toco_suelo = collisionType(type_plataforma);
  •                 }
  •                 break;
  •         }
  •     }
  • };
  • //------------------------------------------------------------------
  • class personaje:public process{
  •     public:
  •     int st = 0;
  •     sensor* s;
  •     bool salto = false;
  •     void frame(){
  •         addVy(10);
  •         switch(st){
  •             case 0:
  •                 {
  •                     graph = img[1];
  •                     visible = true;
  •                     x = 320;
  •                     y = 320;
  •                     createBody(TYPE_BOX, METAL);
  •                     s = new sensor();
  •                     st = 10;
  •                 }
  •                 break;
  •             case 10:
  •                 {
  •                     /* ¿¿ TOCO SUELO ?? */
  •                     if(s->toco_suelo){
  •                         screenDrawText(GetFontDefault(), 18, "TOCO_SUELO", CENTER, x, y-50, WHITE, 255);
  •                         if(key(KEY_UP) && salto==false){
  •                             salto = true;
  •                             addVy(-400);
  •                         }
  •                     }else{
  •                        
  •                     }
  •                     if(!key(KEY_UP)){
  •                         salto = false;
  •                     }
  •                     if(key(KEY_LEFT)){
  •                         addVx(-10);
  •                     }
  •                     if(key(KEY_RIGHT)){
  •                         addVx(10);
  •                     }
  •                     if(key(KEY_DOWN)){
  •                         addVy(5);
  •                     }
  •                 }
  •                 break;
  •         }
  •     }
  • };
  • //------------------------------------------------------------------
  • class plataforma:public process{
  •     public:
  •     int st = 0;
  •     int w,h;
  •     plataforma(float x, float y, float width, float height, float angle){
  •         this->x = x;
  •         this->y = y;
  •         this->w = width;
  •         this->h = height;
  •         this->angle = angle;
  •     }
  •     void frame(){
  •         switch(st){
  •             case 0:
  •                 {
  •                     graph = newGraph(w, h, BLUE);
  •                     visible = true;
  •                     createBody(TYPE_BOX, HUMAN);
  •                     type_plataforma = type;
  •                     setStatic(true);
  •                     st = 10;
  •                 }
  •                 break;
  •             case 10:
  •                    
  •                 break;
  •         }
  •     }
  • };
  • //------------------------------------------------------------------
  • void draw(){
  •     switch(ST){
  •         case 0:
  •             {
  •                 // plataforma( x, y, ancho, alto, angulo );
  •                 new plataforma(320, 390, 640, 10, 0);
  •                 new plataforma(100, 350, 200, 5, 10);
  •                 new plataforma(540, 350, 200, 5, -10);
  •                 new plataforma(200, 250, 100, 5, 0);
  •                 new plataforma(440, 250, 100, 5, 0);
  •                 new plataforma(320, 150, 200, 5, 0);
  •                 new personaje();
  •                 ST = 10;
  •             }
  •             break;
  •         case 10:
  •             {
  •                
  •             }
  •             break;
  •     }
  • }
You do not have the required permissions to view the files attached to this post.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Test de mi gameEngine en C++

Postby Hokuto7 » Sat Jan 19, 2019 8:49 pm

Funciona muy bien el ejemplo,pero cuando estas saltando continuamente hay contacto con el sensor amarillo y el objeto rosa se que da como flotando un segundo y luego cae.

Por cierto,lo de crear un objeto aparte como sensor supongo que es para hacer pruebas porque si hay que crear un objeto aparte del personaje principal para un juego de plataformas es un poco rollo,en contruct2 lo entiendo porque no se suele utilizar un motor de fisicas para juegos de plataformas pero si se utiliza un motor de fisicas no se deberia hacer nada extra.
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Test de mi gameEngine en C++

Postby erkosone » Sat Jan 19, 2019 9:30 pm

Puedes no usarlo claro.. pero tu lo que quieres detectar es la colision con la plataforma solo por la parte de abajo del personaje.. así que el sensor es necesario para simplificar, internamente muchos motores lo hacen así o incluso mas complejo mirando si el punto de contacto esta por encima o por debajo o por los lados.. en fin.. que es lo mismo que hacia yo en las versiones de gameLibZero para processing y javaScript, pero realmente con un sensor la cosa queda mucho mas compacta.
Aunque para gustos colores claro.. la libreria lleva dentro la chipmunk.. puedes hacerlo como mas te guste, incluso pasar de la chipmunk y usar mapas de durezas.. lo dicho.. lo que mas te guste.. yo como en esta versión de la libreria el crear unos procesos mas no tiene apenas peso en el rendimiento lo hago directamente con sensores por que es mas versatil y puedo hacer muchisimas mas cosas de una forma mas sencilla, pero hazcerlo se puede como te de la gana :P
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Test de mi gameEngine en C++

Postby Hokuto7 » Sat Jan 19, 2019 10:00 pm

Ok.

En clickteam fusion se utiliza un sprite cuadrado aparte del sprite principal para utilizarlo como mascara de colision y luego se crean cuatro sprite simples para utilizarlos como sensores y se colocan en cada lado del cuadrado mascara para poder cubrir todo tipo de situaciones que sucedan en el juego,pero en este programa es muy comodo hacer esto porque se hace visualmente en el editor de escenarios y ves todo lo que haces.

Pero en tu libreria hay que crear unos cuantos procesos y se vuelve un poco pesado manejar esto en el codigo sobre todo porque no ves lo que estas haciendo en la pantalla hasta que la ejecutas y tienes que tener muy bien ordenado el codigo,sin embargo cuando utilizo el motor de fisicas en clickteam fusion no tengo que crear ningun sensor,me lo da todo hecho las fisicas y yo pensaba que la fisica de tu libreria haria lo mismo.

En unity tampoco hay que crear ningun sensor,el motor de fisicas te lo da todo hecho y yo pensaba que el motor de fisicas de tu libreria haria lo mismo,pero no tengo ningun problema en escribir mas codigo sin embargo pensaba que el motor de fisicas te daria mas facilidades y tener que escribir menos codigo,pero veo que no es asi,tendre que aguantarme con esto. :(
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Test de mi gameEngine en C++

Postby erkosone » Sun Jan 20, 2019 9:40 pm

Haber.. que implementar eso es una chuminada.. puedes enseñarme una captura de esos sensores que me dices?
Si lo ver util puedo implementarlo también en la libreria.. es realmente simple hacer eso..

Por cierto, avaces:
-----------------------

Acabo de mejorar la rutina de carga de fuentes bitmap, osea, ahora cuando exportas una fuente con la herramienta de fuentes a la carpeta de las fuentes del juego, la función loadFonts() carga todo lo que tenga extensión .fnt y no perderá tiempo en intentar las tablas png que acompañan alas fuentes, ahora ya se puede dejar todas las fuentes bitmap en una carpeta y cargarlas del tiron también.

Todos estos detalles los estoy puliendo gracias a los jeugos que estoy preparando para los siguientes turoriales.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Test de mi gameEngine en C++

Postby Hokuto7 » Sun Jan 20, 2019 10:20 pm

Creo que es mejor que siga viendo como lo haces tu que sabes mucho mas que yo y de esta forma seguir aprendiendo. ;)
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Test de mi gameEngine en C++

Postby Hokuto7 » Wed Jan 23, 2019 11:45 am

Hola erkozone,estoy ultimamente escuchando hablar mucho sobre inteligencia artificial pero la realidad es que no he visto nada en juegos y programas,no se que pensar sobre esto.

Si lo que se dice es cierto,seria interesante que añadieras algunas funciones para manejar la inteligencia artifial en tu libreria y poder dotar a enemigos de esta supuesta inteligencia artificial.
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Test de mi gameEngine en C++

Postby erkosone » Wed Jan 23, 2019 1:26 pm

solo tienes que linkar al proyecto la tensorFlow de google amigo jeje..
Puedes usar toda la IA que quieras y de ultima generacion.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Test de mi gameEngine en C++

Postby erkosone » Fri Jan 25, 2019 5:47 am

UPDATE:
- Añadidos nuevos metodos para calculo de distancias en 2d y 3d.
- Añadidos nuevos materiales tales como 'SENSOR' para crear cuerpos kinematicos hasta ahora no disponibles.
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 7 guests