Foros - Stratos

Proyectos => IndieLib => Mensaje iniciado por: Angus en 10 de Junio de 2006, 11:58:54 PM

Título: Problema con Entidad2dmanager->Delete()
Publicado por: Angus en 10 de Junio de 2006, 11:58:54 PM
Primero, felicitaciones por la lib.

Mi problema es muy sencillo, acá va un pedazo de código:

// Entidad
LOV_Entity2d  entidad1;
Entidad2dManager->Add(&entidad1); // Añadir la entidad

// Quitar la entidad del manager
Entidad2dManager->Delete(&entidad1);


Me da el error típico de windows, y en el log del Debug se corta así:
Citar
[19:50:17] [ BEGIN ] -- Liberando entidad --
                   {

Saludos y gracias desde ya.

Edit:
Probé algunas cosas, y resulta que si lo compilo con el Microsoft Visual C++ 6.0 me va bien, pero si lo compilo con el Microsoft Visual C++ 2005 no. Probablemente sea alguna configuración del proyecto, pero no estoy seguro :(
Título: Problema con Entidad2dmanager->Delete()
Publicado por: Loover en 30 de Junio de 2006, 11:23:16 PM
Perdón por tardar tanto en responder. Increiblemente no vi el post. Para alguien que escribe aquí y no me encargo de él. Lo siento de veras.

El código que has puesto, no debería dar ningún error. La librería efectivamente está compilada con vc++ 6. No sé si será algún error del proyecto o simplemente un error que ocurre al ejecutarla en una aplicación compilada con Microsoft Visual C++ 2005.

¿Lograste subsanar el error?
Título: Problema con Entidad2dmanager->Delete()
Publicado por: Angus en 04 de Julio de 2006, 01:27:43 AM
No hay problema con que te hayas tardado, aproveché el tiempo para ver el source y aprender de él.

No, no logré arreglar eso. Es raro, porque hasta abrí un ejemplo donde usa esa función (el ejemplo hecho en vc++ 6) con el vc++ 8, y le di que convierta el proyecto a la versión 2005, y tampoco anda. No se me ocurre que puede ser, y ese es el único inconveniente que tuve, por el resto todo bien.

De última podría usar el vc++ 6, ya que uso el 2005 por algunas comodidades extras que me brinda, pero me sorpendió el error.

Una pregunta aparte, le hice algunos cambios a la lib y cuando quize compilarla, es como que en los includes toma el path, desde donde se encuentra el mismo archivo, en vez de donde se encuentra el proyecto, por ejemplo:

Proyecto
C:\Proyecto\Proyecto.dsw
C:\Proyecto\Proyecto.dsp

Source:
C:\Proyecto\Source\source.cpp
C:\Proyecto\Header\header.h

Y en el source.cpp tengo:
#include "Header\header.h"

Y no me lo acepta, porque para que lo acepte, el header.h se tendría que encontrar acá:
C:\Proyecto\Source\Header\header.h

Quisiera saber como solucionar esto también, si es posible.

Saludos y gracias.
Título: Problema con Entidad2dmanager->Delete()
Publicado por: Loover en 20 de Julio de 2006, 07:25:26 PM
Creo que ya sé donde está el problema con el Delete. En cuanto pueda lo arreglo y lo subo.

Un saludo.
Título: Problema con Entidad2dmanager->Delete()
Publicado por: Angus en 08 de Agosto de 2006, 04:17:58 AM
Sí, por favor, porque ahora que pruebo, cuando le paso el exe a otras computadoras no les anda, y es cuando se ejecuta esa función.

Saludos.
Título: Problema con Entidad2dmanager->Delete()
Publicado por: Angus en 08 de Agosto de 2006, 04:36:01 AM
Creo que encontré el error, pero no logro compilar la librería :(.

Acá estaría el error:

int i = 0;
for (mEntityListIter  = mListEntities2d.begin();
i < mNumEntities;
mEntityListIter++)
{
if ((*mEntityListIter) == pEn)
{
mIs = 1;
mListEntities2d.erase (mEntityListIter);
mNumEntities--;
}
i++;
}


Debería ser así, creo yo:

for (mEntityListIter  = mListEntities2d.begin();
mEntityListIter != mListEntities2d.end()
mEntityListIter++)
{
if ((*mEntityListIter) == pEn)
{
mIs = 1;
mListEntities2d.erase (mEntityListIter);
mNumEntities--;
break ;
}
}


Ya que lo que hace antes es seguir iterando una lista de la que se le quita un valor dentro del loop, y da error al seguir iterando. De todos modos no tiene sentido seguir iterando, ya que no va a haber 2 entidades iguales. Y en caso de que haya, debería hacerse de otra forma (con una función recursiva quizás).

Lo mismo pasa con este código:

/*
==================
Borramos la imagen de la lista
==================
*/
void LOV_Entity2dManager::DelFromList (LOV_Entity2d *pEn)
{
// Reccoremos la lista buscando el elemento a borrar
vector <LOV_Entity2d*>::iterator mIter;
for (mIter  = mListEntities2d.begin();
mIter != mListEntities2d.end();
mIter++)
{
if ((*mIter) == pEn)
mListEntities2d.erase (mIter);
}

pEn = 0;
}

Le falta el break para terminar el loop, sigue iterando una lista de la cual se le quitó un elemento.

Saludos, voy a seguir intentando compilarla de todas formas, ya que me gustó mucho esta dll, jeje.
Título: Problema con Entidad2dmanager->Delete()
Publicado por: Angus en 10 de Agosto de 2006, 01:36:32 AM
Bueno, logré compilarla y arreglar eso, ahora me funciona todo perfecto y puedo compilar en el Visual 2005, y mejor aún, la DLL quedó como 300kb más chica.

Otra cosa que modifiqué, es la función ZisLess, que está definida en el mismo archivo de cabecera, cuando es mejor solamente declararla ahí, y definirla en el .cpp, sino luego te da unos errores de linker, cómo se ve en este thread:
http://www.stratos-ad.com/forums/index.php?act=ST&f=40&t=4347&s=8b39e6e1401239a292e7c71dd98c259f
(Ver último post de la primera página).

Saludos!
Título: Problema con Entidad2dmanager->Delete()
Publicado por: Loover en 02 de Septiembre de 2006, 01:23:09 AM
Buenas Angus,

Lamento tardar tanto en cada respuesta y ser tan poco de ayuda pero la verdad es que estoy bastante liado.

Es genial el trabajo que estás haciendo, tienes razón en todo lo que has dicho. Incluso creo que ese bug se repite en el resto de los manager. Pero me alegro de que tenga fácil solución.

En cuánto en que has logrado compilarla para Visual 2005 es un logro brutal, sería genial poder subir esa versión a la web.

Podría darte si estas interesado, acceso al ftp y así cambiar lo que se te antoje y subir tus propias pruebas, etc. Estás haciendo mucho por esta librería.

Me gustaría si quieres, que me agregaras al msn [javidrislo((ARROBA))hotmail((PUNTO))com]

Por cierto, ¿estás haciendo algún proyecto con ella? ¿un juego?
Título: Problema con Entidad2dmanager->Delete()
Publicado por: Angus en 14 de Septiembre de 2006, 02:55:36 AM
Bueno, ya te agregué, nos vemos por el msn entonces ;)

Saludos!