Page 11 of 33

Re: Test de mi gameEngine en C++

Posted: Fri Dec 14, 2018 3:04 pm
by CicTec
Tambien me olvide que falta el sistema de jerarquea, fundamental para la gestion de senales multiples y otras cosas.

Re: Test de mi gameEngine en C++

Posted: Fri Dec 14, 2018 3:10 pm
by erkosone
Ya lo se CicTec, pero si te digo la verdad los priority nunca tuvieron mucho sentido para mi, siempre programé sin ellos y nunca me hicieron falta, muchas veces si que los necesitaba al principio por que no sabia como ordenar de otra manera las ejecuciones del codigo, pero al final entendí como hacerlo y no los necesito.

Sobre el error que tengo ahora mismo.. es por que no se eliminar correctamente objetos de un vector desde el interior de un bucle for que recorre al vector, esto me provoca fallos y tengo que averiguar como hacerlo bien..

osea.. lo que estoy haciendo es basicamente esto:
[Codebox=cpp file=Untitled.cpp]int iterator = 0;
for(auto s : sprites){ // execute batch game sprites..
s->render();
s->frame();

if(!s->live) { // check if sprite needs dead..
if(s->body_created){
cpShapeDestroy(s->shape);
cpBodyDestroy(s->body);
}
//sprites.erase( begin(sprites)+iterator );
iterator++;
}
}[/Codebox]

La linea que tengo comentada es la que me da el crash.. entiendo que cuando elimino un sprite del vector sprites, el tamaño del vector cambia y no solo eso.. los objetos se reordenan.. y esto me provoca casi seguro un acceso fuera de rango o algo peor..

En java este tipo de cosas es automatico pero en C++ hay que ser cuidadoso por lo que me parece..
Estoy buscando la forma de recorrer el vector de procesos y eliminar los que estan marcados con live=false;

Se te ocurre como hacerlo bien y eficientemente? puedo hacer una chapuza.. pero no quiero.. tiene que haber una forma normal de hacerlo.

Re: Test de mi gameEngine en C++

Posted: Fri Dec 14, 2018 3:24 pm
by erkosone
Parece que acabo de encontrar la forma de hacerlo.. la verdad es que C++ es un mundo a parte jajajajaa... pero al final no estoy tan pez como pensaba..

[Codebox=cpp file=Untitled.cpp]int itr=0;
for(auto s : sprites){
if(!s->live){
sprites.erase(sprites.begin()+itr);
}
++itr;
}[/Codebox]

Ale, creo que lo tengo solucionado!!!

Re: Test de mi gameEngine en C++

Posted: Fri Dec 14, 2018 3:28 pm
by CicTec
erkosone wrote:Ya lo se CicTec, pero si te digo la verdad los priority nunca tuvieron mucho sentido para mi, siempre programé sin ellos y nunca me hicieron falta, muchas veces si que los necesitaba al principio por que no sabia como ordenar de otra manera las ejecuciones del codigo, pero al final entendí como hacerlo y no los necesito.
La priority es fundamental, sin esa no podras hacer unas cosas y otras no funcionaran correctamente, si quieres implementar un sistema de procesos hay que implementarlo, sino olvidate del sistema de procesos.
erkosone wrote: Sobre el error que tengo ahora mismo.. es por que no se eliminar correctamente objetos de un vector desde el interior de un bucle for que recorre al vector, esto me provoca fallos y tengo que averiguar como hacerlo bien..

osea.. lo que estoy haciendo es basicamente esto:
[Codebox=cpp file=Untitled.cpp]int iterator = 0;
for(auto s : sprites){ // execute batch game sprites..
s->render();
s->frame();

if(!s->live) { // check if sprite needs dead..
if(s->body_created){
cpShapeDestroy(s->shape);
cpBodyDestroy(s->body);
}
//sprites.erase( begin(sprites)+iterator );
iterator++;
}
}[/Codebox]

La linea que tengo comentada es la que me da el crash.. entiendo que cuando elimino un sprite del vector sprites, el tamaño del vector cambia y no solo eso.. los objetos se reordenan.. y esto me provoca casi seguro un acceso fuera de rango o algo peor..

En java este tipo de cosas es automatico pero en C++ hay que ser cuidadoso por lo que me parece..
Estoy buscando la forma de recorrer el vector de procesos y eliminar los que estan marcados con live=false;

Se te ocurre como hacerlo bien y eficientemente? puedo hacer una chapuza.. pero no quiero.. tiene que haber una forma normal de hacerlo.
Porque como te dije anteriormente no puedes hacer todo en un bucle, hay que dividir, sino las cosas no funcionaran correctamente...

un sistema de procesos y rendering DIV hace:
1. recorrer todos los procesos para averiguar si tienen senal S_KILL o no, si tienen senal se eliminan y se quitan de la lista
2. recorrer todos los procesos que quedan despues el punto 1 para ordenarlos por priority.
3. recorrer todos los procesos que quedan despues el punto 2 checkeando si el proceso no es congelado o durmiente (para una correcta gestion de los segnales), en este caso lo ejecuta (codigo y/en frame)
Estos tres puntos terminan la ejecucion de los procesos, despues hay:
4. recorrer todos los objetos graficos (sprites, textos, primitivas, etc...) y ordenarlos por Z.
5. recorrer todos los objetos graficos ordenados en el punto 4 para renderizarlos.
Estos dos puntos se encargan del rendering (procesos y no), luevo se vuelve al punto 1 y se repite hasta no terminar el programa o a eliminar todos los procesos del programa.

Un proceso cuando viene creado y eliminado tiene que setear correctamente su jerarquea para que no haya crash/errores en ejecucion.

Tu actualmente tienes un solo bucle haciendo ejecution y rendering y no es correcto, tienes que implementarlo en 5 puntos como te indique, con cual tipo de implementacion eso lo veras tu.

Considera que una vez tenido eso tu programa bajara tambien sensiblemente de FPS, y mas procesos crearas en el program, mas sera fuerte la baja, pero almenos tendras un sistema correcto que se pueda definir como procesos estilo DIV.

Re: Test de mi gameEngine en C++

Posted: Fri Dec 14, 2018 7:18 pm
by erkosone
Ok CicTec lo tendré en cuenta, pero ya te digo que el priority para mi forma de programar me parece un retraso y perdida de performance, siempre lo he implementado de una forma mas simple y funciona igual de bien.
Lo hice en java/processign y luego en js, y ahora estoy intentandolo en C++, de hecho ya lo he conseguido hace una media hora, ahora solo me queda gestionar la memoria residual de los shapes y los body liberados de la chipmunk.

Ya te digo, que lo que tu comentas es lo ideal, pero es lento y se puede esquivar facilmente jugando solo con las Z y creando un proceso padre que ordena a los procesos que quieres ordenar con priority, así te ahorras todas esas escaneadas de procesos continuamente y el performance es muy superior.

Igualmente gracias por la info, me viene muy bien saber todo esto :)

Re: Test de mi gameEngine en C++

Posted: Fri Dec 14, 2018 7:20 pm
by CicTec
erkosone wrote: Ya te digo, que lo que tu comentas es lo ideal, pero es lento y se puede esquivar facilmente jugando solo con las Z y creando un proceso padre que ordena a los procesos que quieres ordenar con priority, así te ahorras todas esas escaneadas de procesos continuamente y el performance es muy superior.

Igualmente gracias por la info, me viene muy bien saber todo esto :)
No lo puedes esquivar, la priority es para la gestion de los procesos, la Z para la gestion del rendering, son dos cosas diferentes, luego haz como prefieras.

Re: gameLibZeroCPP [game engine] open source.

Posted: Sun Dec 16, 2018 4:45 pm
by OskarG
Pregunta tonta...todavia no he visto los videos ahora los miro,estoy liado con una cosa que voy a colgar...¿?¿?...ya se puede hacer un juego con scrolls?¿?que limitaciones tengo en este momento??

Re: gameLibZeroCPP [game engine] open source.

Posted: Sun Dec 16, 2018 4:56 pm
by erkosone
Se puede, y con muchisimas features ya que raylib tiene algo llamado camera2D que es bastante potente por que te deja hacer practicamente de todo lo que haces en gemix con destination directamente en el render principal.
Peor gameLibZero ahora mismo no tiene scroll jeje, es el paso que estoy haciendole ahora.

Ahora mismo estoy integrando ya de forma nativa las funciones:

startScroll();
stopScroll();
y todas sus propiedades..

Para los scrolls como los de gemix así sencillos de manejar dame unos dias mas :P

Re: gameLibZeroCPP [game engine] open source.

Posted: Sun Dec 16, 2018 4:59 pm
by OskarG
Gracias. por la info.....entonces me espero ....

Re: gameLibZeroCPP [game engine] open source.

Posted: Sun Dec 16, 2018 5:00 pm
by Hokuto7
Vamos al lio. :)