Test de mi gameEngine en C++
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: Test de mi gameEngine en C++
Tambien me olvide que falta el sistema de jerarquea, fundamental para la gestion de senales multiples y otras cosas.
- erkosone
- Posts: 10656
- Joined: Tue Feb 24, 2009 2:13 pm
- Location: Barcelona.
- Contact:
Re: Test de mi gameEngine en C++
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.
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.
http://iphonegamesdev.com/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
- erkosone
- Posts: 10656
- Joined: Tue Feb 24, 2009 2:13 pm
- Location: Barcelona.
- Contact:
Re: Test de mi gameEngine en C++
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!!!
[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!!!
http://iphonegamesdev.com/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: Test de mi gameEngine en C++
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.
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.
- erkosone
- Posts: 10656
- Joined: Tue Feb 24, 2009 2:13 pm
- Location: Barcelona.
- Contact:
Re: Test de mi gameEngine en C++
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
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
http://iphonegamesdev.com/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: Test de mi gameEngine en C++
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
- OskarG
- Posts: 612
- Joined: Tue Jan 12, 2010 2:12 am
Re: gameLibZeroCPP [game engine] open source.
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??
- erkosone
- Posts: 10656
- Joined: Tue Feb 24, 2009 2:13 pm
- Location: Barcelona.
- Contact:
Re: gameLibZeroCPP [game engine] open source.
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
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
http://iphonegamesdev.com/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
- OskarG
- Posts: 612
- Joined: Tue Jan 12, 2010 2:12 am
Re: gameLibZeroCPP [game engine] open source.
Gracias. por la info.....entonces me espero ....
- Hokuto7
- Posts: 1408
- Joined: Mon Aug 28, 2017 10:14 am
Re: gameLibZeroCPP [game engine] open source.
Vamos al lio. 