Re: Test de mi gameEngine en C++
Posted: Fri Dec 14, 2018 3:04 pm
Tambien me olvide que falta el sistema de jerarquea, fundamental para la gestion de senales multiples y otras cosas.
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: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.
Porque como te dije anteriormente no puedes hacer todo en un bucle, hay que dividir, sino las cosas no funcionaran correctamente...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.
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.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